js的2||3返回的是2,这个原理是什么呢?其他语言(如:php)返回的就是一个bool值
2||3
认证高级PHP讲师
这个就是JS的|| &&比较运算符的规则
具有短路功能对于||只要之前的任何一个表达式计算结果为true或能够转换为true,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值对于&&只要之前的任何一个表达式计算结果为false或能够转换为false,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值
JS各种值及对象和boolean值之间的转换关系,请参考下其他资料
就2||3而言
2转成boolean值为true所以表达式就短路,而将2返回。
2&&3,返回的结果就为3
2&&3
这种规则有个实用的地方
var result=obj&&obj.getName();
在obj不为null,undefined的情况下,将执行obj.getName(),返回结果
比
var result; if(obj){ result = obj.getName() }
写法上简洁些
php不懂,在js中,当||时,找到为true的分项就停止处理,并返回该分项的值,否则执行完,并返回最后分项的值,你可以试试0||3
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
这个就是JS的|| &&比较运算符的规则
具有短路功能
对于||只要之前的任何一个表达式计算结果为true或能够转换为true,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值
对于&&只要之前的任何一个表达式计算结果为false或能够转换为false,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值
JS各种值及对象和boolean值之间的转换关系,请参考下其他资料
就
2||3
而言2转成boolean值为true
所以表达式就短路,而将2返回。
2&&3
,返回的结果就为3这种规则有个实用的地方
在obj不为null,undefined的情况下,将执行obj.getName(),返回结果
比
写法上简洁些
php不懂,在js中,当||时,找到为true的分项就停止处理,并返回该分项的值,否则执行完,并返回最后分项的值,你可以试试0||3
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