当我使用evals修复旧代码中的错误时,我意识到表达式评估真的很奇怪.
如果您打开JavaScript控制台并键入
eval ('{"a": "b"}')
Run Code Online (Sandbox Code Playgroud)
要么
{"a": "b"}
Run Code Online (Sandbox Code Playgroud)
你得到
SyntaxError: Unexpected token :
Run Code Online (Sandbox Code Playgroud)
但如果你输入
var o = {"a": "b"};
Run Code Online (Sandbox Code Playgroud)
该语句以期望的结果执行.
如果你打字也是
(function() {return {"a": "b"};})()
Run Code Online (Sandbox Code Playgroud)
你得到:
Object {a: "b"}
Run Code Online (Sandbox Code Playgroud)
另外,如果你输入{a: "b"},你会得到"b".我根本不明白.
我习惯于认为var o = {"a": "b"};"评估表达式{"a": "b"}并将结果分配给o.
但显然它比这更复杂.我试着在语言规范中找到关于这一点的解释,但我认为我没有使用正确的措辞进行搜索.
任何人都可以提供一个线索,说明为什么我可以返回或将某个不是有效可评估表达式的值的值分配给变量?
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |