当我使用 eval 修复旧代码中的错误时,我意识到表达式求值非常奇怪。
如果您打开 JavaScript 控制台并键入
eval ('{"a": "b"}')
或者
{"a": "b"}
你得到
SyntaxError: Unexpected token :
但是如果你输入
var o = {"a": "b"};
该语句以预期的结果执行。
如果你输入
(function() {return {"a": "b"};})()
你得到:
Object {a: "b"}
此外,如果您键入{a: "b"}
,您会得到“b”。我完全不明白。
我曾经认为这var o = {"a": "b"};
意味着“评估表达式{"a": "b"}
并将结果分配给o
.
但显然它比这更复杂。我试图在语言规范中找到关于这一点的解释,但我认为我没有使用正确的措辞进行搜索。
任何人都可以提供关于为什么我可以将本身不是有效可评估表达式的值返回或分配给变量的线索吗?