Javascript三元运算符和赋值

时间:2011-02-22 15:37:16

标签: javascript variable-assignment ternary

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

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

我原本希望将1分配到v。如果你这样做,结果相同

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

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

4 个答案:

答案 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识别的类型,而不是打印到控制台的类型。

进一步阅读:

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

答案 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)

此代码可以正常工作:

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

检查here。它显示 1