ホームページ  >  に質問  >  本文

javascript - js的||与&&的问题

js的2||3返回的是2,这个原理是什么呢?其他语言(如:php)返回的就是一个bool值

PHP中文网PHP中文网2749日前286

全員に返信(3)返信します

  • ringa_lee

    ringa_lee2017-04-10 16:19:17

    这个就是JS的|| &&比较运算符的规则

    具有短路功能
    对于||只要之前的任何一个表达式计算结果为true或能够转换为true,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值
    对于&&只要之前的任何一个表达式计算结果为false或能够转换为false,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值

    JS各种值及对象和boolean值之间的转换关系,请参考下其他资料

    2||3而言

    2转成boolean值为true
    所以表达式就短路,而将2返回。

    2&&3,返回的结果就为3

    这种规则有个实用的地方

    var result=obj&&obj.getName();

    在obj不为null,undefined的情况下,将执行obj.getName(),返回结果

    var result;
    if(obj){
     result  = obj.getName()
    }

    写法上简洁些

    返事
    0
  • PHP中文网

    PHP中文网2017-04-10 16:19:17

    php不懂,在js中,当||时,找到为true的分项就停止处理,并返回该分项的值,否则执行完,并返回最后分项的值,你可以试试0||3

    返事
    0
  • 怪我咯

    怪我咯2017-04-10 16:19:17

    js中:
    &&操作符可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,&&操作数不一定返回布尔值,此时它遵循下列规则:
    1.如果第一个操作数是对象,则返回第二个操作数;
    2.如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
    3.如果两个操作数都是对象,则返回第二个操作数;
    4.如果有一个操作数是null,则返回null;
    5.如果有一个操作数是NaN,则返回NaN;
    6.如果有一个操作数是undefined,则返回undefined。

    ||操作符可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,||操作数不一定返回布尔值,此时它遵循下列规则:
    1.如果第一个操作数是对象,则返回第一个操作数;
    2.如果第一个操作数的求值结果为false,则返回第二个操作数;
    3.如果两个操作数都是对象,则返回第一个操作数;
    4.如果两个操作数都是null,则返回null;
    5.如果两个操作数都是NaN,则返回NaN;
    6.如果两个操作数都是undefined,则返回undefined。

    依据上述规则,2||3返回的是2

    返事
    0
  • キャンセル返事