evalsを使用して古いコードのバグを修正していたとき、式の評価について本当に奇妙なことに気づきました。
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
。
しかし、どうやらそれはそれよりも複雑です。その点についての説明を言語仕様で見つけようとしていますが、正しい表現で検索しているとは思いません。
それ自体では有効な評価可能な式ではないものの値を変数に返す、または割り当てることができる理由について、誰かが手がかりを提供できますか?