JavaScript の {} の解釈におけるブロックとオブジェクト
コードを解析するとき、JavaScript は "{}" を次のように解釈するというあいまいさに直面します。空のブロックまたは空のオブジェクト。どの解釈を使用するかを決定するために、JavaScript は仕様で定義された文法に従います。
言語仕様によれば、Statement は Block、VariableStatement、EmptyStatement、または ExpressionStatement の形式を取ることができます。ブロックは、「{}」の後に「}」で終わるオプションのステートメントのリストが続くものとして定義されます。
したがって、JavaScript は「{}」に遭遇すると、最初にそれをブロックと見なします。なぜなら、「{}」だからです。 " はブロックの構文と一致します。パーサーがブロックとして解釈できない場合にのみ、{} は ExpressionStatement のカテゴリに分類される空のオブジェクトと見なされます。
提供された例では、「{}[]」は次のように解釈されます。空のブロックの後に単項プラスと空の配列が続きます。空のブロックは何も行わず、配列は空の文字列に変換され、その後数値 (0) に変換されます。
Firebug はこの入力を Statement として解釈し、空のブロックが未定義と評価されます。一方、Node.js はこれを式として扱い、ブロックとして解析できず、{} に評価します。
この矛盾は、それぞれの JavaScript エンジンによる入力の解釈の違いから生じます。 Firebug および Chrome 開発ツールは、{} を空のブロックとみなし、これをステートメントとして扱いますが、Node.js はこれを式として扱い、空のオブジェクトになります。
以上が{} を解析すると、次のように解釈されます: ブロックまたはオブジェクト?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。