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()
}
写法上简洁些
怪我咯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