Pet*_*Guo 4 strict typeerror node.js
'use strict'
[1,2,3,4].find(x => x > 1)
Run Code Online (Sandbox Code Playgroud)
使用nodejs 5.0.0执行上述代码时,会出现以下错误:
TypeError: "use strict"[(((1 , 2) , 3) , 4)].find is not a function
at Object.<anonymous> (C:\src\nodejs\ecma6.js:2:11)
at Module._compile (module.js:425:26)
at Object.Module._extensions..js (module.js:432:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Function.Module.runMain (module.js:457:10)
at startup (node.js:136:18)
at node.js:972:3
Run Code Online (Sandbox Code Playgroud)
如果我在'use strict'之后添加分号,则错误消失.
这看起来像一个错误......或者是否有更深层次的含义 - 意味着语言规范中是否存在一个特殊情况列表,其中需要使用分号.
更新
语言规范列出了特殊情况,其中需要显式分号.
这就是为什么总是建议在javascript中使用分号的原因之一.它不起作用的原因是因为代码被解释为:
"use strict"[1,2,3,4] ...
Run Code Online (Sandbox Code Playgroud)
换句话说,它被解释为:
"use strict"[4] ...
Run Code Online (Sandbox Code Playgroud)
因为逗号运算符.这将计算为字符串"s".
现在,其余代码正在尝试:
"s".find()
Run Code Online (Sandbox Code Playgroud)
但是字符串没有find方法.
为了避免这一切,请确保告诉解释器这两行是单独的语句 - 使用分号.
ECMAScript标准(至少ES5)需要此行为.在第7.9.1节第1部分中,定义了管理此案例的规则:
当从左到右解析程序时,遇到任何语法生成不允许的令牌(称为违规令牌),如果出现以下一个或多个,则在违规令牌之前自动插入分号条件是真的:
通过至少一个LineTerminator将违规令牌与先前令牌分开.
违规令牌是}.
在这种情况下,"use strict"和[1,2,3,4]...解析.编译器查看结果语句:
"use strict"[1,2,3,4]...
Run Code Online (Sandbox Code Playgroud)
并注意到这是有效的JavaScript.因此,未插入分号,因为在语句中未找到"违规令牌".
| 归档时间: |
|
| 查看次数: |
2377 次 |
| 最近记录: |