在JavaScript中,为什么(undefined && true)返回undefined?

The*_*zle 9 javascript node.js

使用node.js控制台(节点0.10.24)

> var x = (undefined && true);
undefined
> x;
undefined
> x = (true && undefined);
undefined
> x;
undefined
Run Code Online (Sandbox Code Playgroud)

为什么比较返回未定义?我希望它返回false,因为undefined被认为是"假的".

Poi*_*nty 11

&&由操作者进行内部胁迫的表达式的值到布尔值,但结果操作者总是失败的第一个表达式(即,这是falsey)的实际,不受胁迫值.

因此(true && undefined)会导致undefined因为true falsey.同样,(true && 0)会评估0.

  • 结果是_first_表达式的未校正值失败(因为一旦失败,执行就会停止). (4认同)

zzz*_*Bov 5

在JavaScript ||&&不保证返回布尔值,只会做,当操作数都是布尔.

a = b || c 本质上是一个快捷方式:

a = b ? b : c;
Run Code Online (Sandbox Code Playgroud)

a = b && c 本质上是一个快捷方式:

a = b ? c : b;
//or
a = !b ? b : c;
Run Code Online (Sandbox Code Playgroud)


And*_*ker 5

为了形式化其他人所说的内容,以下是ECMAScript 规范中关于如何评估逻辑 AND 运算符的内容:

  1. 令 lref 为计算 LogicalANDExpression 的结果。
  2. 令 lval 为 GetValue(lref)。
  3. 如果 ToBoolean(lval) 为 false,则返回 lval。
  4. 令 rref 为计算 BitwiseOREExpression 的结果。
  5. 返回 GetValue(rref)。

也许最相关的是第 11.11 节底部的注释:

&& 或 || 产生的值 运算符不一定是布尔类型。生成的值始终是两个操作数表达式之一的值。