对于这个简单的 JavaScript 赋值语句,我得到了意想不到的结果:
var t = 1 == 1 ? 1 : 0;
undefined
我本来希望将 1 分配给 t 。如果你这样做,结果相同
var t = (1 == 1 ? 1 : 0);
undefined
有人可以解释为什么这不能按预期工作吗?
对于这个简单的 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:var VariableDeclarationList;评估如下:评估 VariableDeclarationList。返回(正常、空、空)。
whereReturn (normal, empty, empty).
指的是 JavaScript 在内部识别的类型,而不是会打印到控制台的类型。
进一步阅读:
它完美地工作:
> var t = 1 == 1 ? 1 : 0;
undefined
> t
1
您可以说赋值操作的返回值是undefined
,而不是 的值t
。
编辑:但实际上,如果我正确阅读了规范,它似乎应该返回表达式的值。
正如@TJ Crowder 提到的,似乎var
是对undefined
价值负责。但这并不意味着您不应该使用var
. 您编写的代码是 100% 正确的。
这更多地涉及到语言的内部工作,我认为这不是你感兴趣的。Bur 要了解更多信息,请查看评论。
在旧的 javascript 解析器中,我们需要在括号中总结条件:
var t = (1 == 1) ? 1 : 0;