我为这个简单的JavaScript赋值语句得到了意想不到的结果:
var t = 1 == 1 ? 1 : 0;
undefined
我原本希望将1分配到v。如果你这样做,结果相同
var t = (1 == 1 ? 1 : 0);
undefined
有人可以解释为什么这不能按预期工作吗?
答案 0 :(得分:20)
评估Firebug控制台中var t = 1 == 1 ? 1 : 0;
的结果为undefined
。但是,t
的值将按预期为1
。尝试在分配后输出t
。
Firebug 将打印结果:
var t;
t = 1 == 1 ? 1 : 0;
这是因为赋值操作的返回值是指定的值。但是,当存在var
关键字时,返回的是VariableStatement声明的值,其行为如下:
生产 VariableStatement : var VariableDeclarationList ;被评估 如下:评估 VariableDeclarationList 。返回 (正常,空,空)。
Return (normal, empty, empty).
指的是内部JavaScript识别的类型,而不是打印到控制台的类型。
进一步阅读:
答案 1 :(得分:10)
完美无缺:
> var t = 1 == 1 ? 1 : 0;
undefined
> t
1
你可以说赋值操作的返回值是 undefined
,而不是t
的值。
编辑:但实际上if I read the specification correctly,它似乎应该返回表达式的值。
作为@ T.J。克劳德提到,似乎var
负责undefined
值。但这并不意味着您不应该使用var
。您编写的代码是100%正确的。
这更多地涉及语言的内部运作,我认为这不是你感兴趣的内容。有关这方面的更多信息,请查看评论。
答案 2 :(得分:2)
在旧的JavaScript解析器中,我们需要在括号中结束条件:
var t = (1 == 1) ? 1 : 0;
答案 3 :(得分:1)