far*_*idz 23 javascript variable-assignment ternary
我得到了这个简单的JavaScript赋值语句的意外结果:
var t = 1 == 1 ? 1 : 0;
undefined
Run Code Online (Sandbox Code Playgroud)
我原本希望将1分配给v代替.如果你这样做,结果相同
var t = (1 == 1 ? 1 : 0);
undefined
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这不能按预期工作吗?
Way*_*ett 22
var t = 1 == 1 ? 1 : 0;比如说,Firebug控制台的评估结果将是undefined.但是,价值t将1如预期.尝试t在分配后输出.
当变量声明位于单独的行时,Firebug 将打印结果:
var t;
t = 1 == 1 ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
这是因为赋值操作的返回值是指定的值.但是,当var关键字出现时,返回的是VariableStatement声明的值,其行为如下:
生产VariableStatement:var VariableDeclarationList ; 评估如下:评估 VariableDeclarationList.返回(正常,空,空).
Where Return (normal, empty, empty).指的是JavaScript内部识别的类型,而不是打印到控制台的类型.
进一步阅读:
http://ecma262-5.com/ELS5_HTML.htm#Section_12.2
Fel*_*ing 10
它完美地运作:
> var t = 1 == 1 ? 1 : 0;
undefined
> t
1
Run Code Online (Sandbox Code Playgroud)
你可以说赋值操作的返回值是undefined,而不是值的值t.
编辑:但实际上如果我正确地阅读了规范,它似乎应该返回表达式的值.
正如@TJ Crowder所提到的那样,它似乎var对undefined价值负责.但这并不意味着你不应该使用var.您编写的代码是100%正确的.
这更多地涉及语言的内部运作,我认为这不是你感兴趣的内容.有关这方面的更多信息,请查看评论.