对于这个简单的JavaScript赋值语句,我得到了意想不到的结果。
var t = 1 == 1 ? 1 : 0;
undefined
我本以为会得到1,而不是t。如果你做
var t = (1 == 1 ? 1 : 0);
undefined
谁能解释一下为什么这个不能如期工作?
评估的结果是 var t = 1 == 1 ? 1 : 0;
在,比如说Firebug控制台将是 undefined
. 然而 t
将是 1
正如预期的那样。尝试输出 t
后的任务。
Firebug 会 当变量声明在另一行时,打印结果。
var t;
t = 1 == 1 ? 1 : 0;
这是因为赋值操作的返回值就是被赋值。然而,当 var
关键字存在,返回的是VariableStatement声明的值,其行为如下。
生产 变量报表(VariableStatement : 变种 变量声明列表;的评价如下。评价 变量声明列表. 返回(正常、空、空)。
其中 Return (normal, empty, empty).
指的是JavaScript内部识别的类型,而不是会被打印到控制台的东西。
进一步的阅读。
它工作得很完美。
> var t = 1 == 1 ? 1 : 0;
undefined
> t
1
你可以说 转让操作 是 undefined
价值,而不是 t
.
编辑。 但实际上 如果我没看错的话似乎它应该返回表达式的值。
正如 @T.J. Crowder 提到的那样,似乎 var
负责 undefined
值。但这并不意味着你不应该使用 var
. 你写的代码是100%正确的。
这更多地涉及到语言的内部运作,我想这不是你感兴趣的。伯要了解更多的信息,可以看看注释。
在旧的javascript解析器中,我们需要用括号来结束条件。
var t = (1 == 1) ? 1 : 0;