使用node.js控制台(节点0.10.24)
> var x = (undefined && true);
undefined
> x;
undefined
> x = (true && undefined);
undefined
> x;
undefined
为什么比较返回未定义?我希望它返回false,因为undefined被认为是" falsey"。
答案 0 :(得分:9)
&&
运算符通过内部将表达式的值强制转换为布尔值,但运算符的结果始终是实际的非校正值失败的第一个表达(即,这是假的)。
因此(true && undefined)
将导致undefined
,因为true
不 falsey。同样,(true && 0)
会评估为0
。
答案 1 :(得分:5)
在javascript中||
和&&
不保证返回布尔值,并且只有当操作数是布尔值时才会这样做。
a = b || c
本质上是一个快捷方式:
a = b ? b : c;
a = b && c
本质上是一个快捷方式:
a = b ? c : b;
//or
a = !b ? b : c;
答案 2 :(得分:3)
要正式化别人所说的内容,请参阅ECMAScript specification关于如何评估逻辑AND运算符的内容:
- 让lref成为评估LogicalANDExpression的结果。
- 让lval成为GetValue(lref)。
- 如果ToBoolean(lval)为false,则返回lval。
- 让rref成为评估BitwiseORExpression的结果。
- 返回GetValue(rref)。
醇>
也许最相关的是11.11节底部的注释:
和&&amp ;;或||运算符不一定是类型 布尔。产生的价值将始终是两者之一的价值 操作数表达式。
答案 3 :(得分:0)