js的2||3
返回的是2,这个原理是什么呢?其他语言(如:php)返回的就是一个bool值
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
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
这个就是JS的|| &&比较运算符的规则
具有短路功能
对于||只要之前的任何一个表达式计算结果为true或能够转换为true,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值
对于&&只要之前的任何一个表达式计算结果为false或能够转换为false,后面的表达式就不会计算,并且返回这个表达式的计算结果的原始值
JS各种值及对象和boolean值之间的转换关系,请参考下其他资料
就
2||3
而言2转成boolean值为true
所以表达式就短路,而将2返回。
2&&3
,返回的结果就为3这种规则有个实用的地方
在obj不为null,undefined的情况下,将执行obj.getName(),返回结果
比
写法上简洁些