テスト中に、コンソール (Chrome) の動作が見られました。私が入力した場合、私が期待していたconsole.log({key:'value'})
印刷 です。Object {key: "value"}
しかし、コンソールに直接入力すると、予期したときにのみ{key:'value'}
印刷されました。'value'
Object {key: "value"}
IE10 と FF で同じ動作が見られました。この動作の背後にある理由は何ですか?
テスト中に、コンソール (Chrome) の動作が見られました。私が入力した場合、私が期待していたconsole.log({key:'value'})
印刷 です。Object {key: "value"}
しかし、コンソールに直接入力すると、予期したときにのみ{key:'value'}
印刷されました。'value'
Object {key: "value"}
IE10 と FF で同じ動作が見られました。この動作の背後にある理由は何ですか?
これは、オブジェクトが代わりに、ラベルが前に付いた文字列リテラルで構成される単一のステートメントを含むブロックステートメントとして解釈されているためです。
// v---block----v
{key: "value"}
// ^--label
コンソールがオブジェクト リテラル構文として解釈するには、式の一部である必要があります。括弧で囲むと、期待される結果が得られます。
({key:"value"})
サイドノート:
ここが本当に奇妙な部分です。ステートメントは何も返さないため、ステートメントです。では、なぜそれが返されるの"value"
ですか?
JavaScript では、ステートメントは最終値のようなものを持ちます。(私はそれが何と呼ばれていたか正確には覚えていません。)これは、プログラム コードで有用または到達可能なものではありませんが、プログラムが評価されると、その最終値はそれを評価したものに返されます。
を使用eval()
してプログラムを評価する場合も同様です。その最終ステートメント値が返されます。コンソール内のコードはeval
'd' であるため、最終的な値を取得して出力します。
これは、入力した内容が解釈されるためです。
{key:'value'}
はブロックで、「値」を返します。key:'value'
またはだけで同じ結果が得られ'value'
ます。
オブジェクトを返す式が必要な場合は、 と入力し({key:'value'})
ます。