28

对于这个简单的 JavaScript 赋值语句,我得到了意想不到的结果:

var t = 1 == 1 ? 1 : 0;
undefined

我本来希望将 1 分配给 t 。如果你这样做,结果相同

var t = (1 == 1 ? 1 : 0);
undefined

有人可以解释为什么这不能按预期工作吗?

4

4 回答 4

30

var t = 1 == 1 ? 1 : 0;例如,在 Firebug 控制台中评估的结果将是undefined. 但是, 的值t1如预期的那样。t分配后尝试输出。

当变量声明位于单独的行时,Firebug将打印结果:

var t;
t = 1 == 1 ? 1 : 0;

这是因为赋值操作的返回值就是被赋值的值。但是,当var关键字存在时,返回的是 VariableStatement 声明的值,其行为如下:

产生VariableStatementvar VariableDeclarationList;评估如下:评估 VariableDeclarationList。返回(正常、空、空)。

whereReturn (normal, empty, empty).指的是 JavaScript 在内部识别的类型,而不是会打印到控制台的类型。

进一步阅读:

http://ecma262-5.com/ELS5_HTML.htm#Section_12.2

于 2011-02-22T15:41:30.623 回答
16

它完美地工作:

> var t = 1 == 1 ? 1 : 0;
undefined
> t
1

您可以说赋值操作的返回值是undefined,而不是 的值t


编辑:但实际上,如果我正确阅读了规范,它似乎应该返回表达式的值。

正如@TJ Crowder 提到的,似乎var是对undefined价值负责。但这并不意味着您不应该使用var. 您编写的代码是 100% 正确的。

这更多地涉及到语言的内部工作,我认为这不是你感兴趣的。Bur 要了解更多信息,请查看评论。

于 2011-02-22T15:39:50.717 回答
3

在旧的 javascript 解析器中,我们需要在括号中总结条件:

var t = (1 == 1) ? 1 : 0;
于 2011-02-22T15:42:47.253 回答
1

此代码工作正常:

var t = 1 == 1 ? 1 : 0;
alert (t);

在这里检查。它显示1

于 2011-02-22T15:40:08.053 回答