使用Node.js的控制台(节点0.10.24)在JavaScript中,为什么(undefined && true)返回undefined?
> var x = (undefined && true);
undefined
> x;
undefined
> x = (true && undefined);
undefined
> x;
undefined
为什么比较返回undefined?我希望它会返回false,因为undefined被认为是“falsey”。
使用Node.js的控制台(节点0.10.24)在JavaScript中,为什么(undefined && true)返回undefined?
> var x = (undefined && true);
undefined
> x;
undefined
> x = (true && undefined);
undefined
> x;
undefined
为什么比较返回undefined?我希望它会返回false,因为undefined被认为是“falsey”。
的&&
营运人员收入由内部胁迫的表达式的值到布尔值,但结果操作者总是失败的第一个表达式(即,这是falsey)的实际,不受胁迫值。由于true
是而不是 falsey。同样,(true && 0)
将评估为0
。
结果是失败的_first_表达式的uncoerced值(因为一旦失败,执行就会停止)。 –
@AaronDufour哦对了;杜尔。谢谢! – Pointy
在javascript ||
和&&
不保证返回布尔值,并且只有当操作数是布尔值时才这样做。
a = b || c
本质上是一个快捷方式:
a = b ? b : c;
a = b && c
本质上是一个快捷方式:
a = b ? c : b;
//or
a = !b ? b : c;
为了形式化别人在说什么,这里有什么ECMAScript specification说,关于如何逻辑运算符评估:
- 设lref是评估LogicalANDExpression的结果。
- 让lval成为GetValue(lref)。
- 如果ToBoolean(lval)为false,则返回lval。
- 让rref是评估BitwiseORExpression的结果。
- 返回GetValue(rref)。
也许最相关的,在段11.11的底注:
由& &或产生的值||运算符不一定是 布尔类型。生成的值将始终为两个操作数表达式中的一个的值。
谢谢。我浪费时间在查看“未定义”的文档,而不是AND运算符 – ThePizzle
也相关:http://stackoverflow.com/q/22105549/497418 – zzzzBov