Javascript三元运算符和赋值

问题描述 投票:25回答:4

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

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

我本以为会得到1,而不是t。如果你做

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

谁能解释一下为什么这个不能如期工作?

javascript variable-assignment ternary
4个回答
25
投票

评估的结果是 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内部识别的类型,而不是会被打印到控制台的东西。

进一步的阅读。

http:/ecma262-5.comELS5_HTML.htm#Section_12.2。


12
投票

它工作得很完美。

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

你可以说 转让操作undefined价值,而不是 t.


编辑。 但实际上 如果我没看错的话似乎它应该返回表达式的值。

正如 @T.J. Crowder 提到的那样,似乎 var 负责 undefined 值。但这并不意味着你不应该使用 var. 你写的代码是100%正确的。

这更多地涉及到语言的内部运作,我想这不是你感兴趣的。伯要了解更多的信息,可以看看注释。


3
投票

在旧的javascript解析器中,我们需要用括号来结束条件。

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

1
投票

这段代码可以正常工作

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

检查 此处. 它显示 1.

© www.soinside.com 2019 - 2024. All rights reserved.