javascript - js的||与&&的问题
PHP中文网
PHP中文网 2017-04-10 16:17:17
0
3
316

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

PHP中文网
PHP中文网

认证高级PHP讲师

reply all(3)
左手右手慢动作

这个就是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()
}

写法上简洁些

Ty80

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

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template