2

テスト中に、コンソール (Chrome) の動作が見られました。私が入力した場合、私が期待していたconsole.log({key:'value'})印刷 です。Object {key: "value"}しかし、コンソールに直接入力すると、予期したときにのみ{key:'value'}印刷されました。'value'Object {key: "value"}

IE10 と FF で同じ動作が見られました。この動作の背後にある理由は何ですか?

4

2 に答える 2

5

これは、オブジェクトが代わりに、ラベルが前に付いた文字列リテラルで構成される単一のステートメントを含むブロックステートメントとして解釈されているためです。

//  v---block----v
    {key: "value"}
//    ^--label 

コンソールがオブジェクト リテラル構文として解釈するには、式の一部である必要があります。括弧で囲むと、期待される結果が得られます。

({key:"value"})

サイドノート:

ここが本当に奇妙な部分です。ステートメントは何も返さないため、ステートメントです。では、なぜそれが返されるの"value"ですか?

JavaScript では、ステートメントは最終値のようなものを持ちます。(私はそれが何と呼ばれていたか正確には覚えていません。)これは、プログラム コードで有用または到達可能なものではありませんが、プログラムが評価されると、その最終値はそれを評価したものに返されます。

を使用eval()してプログラムを評価する場合も同様です。その最終ステートメント値が返されます。コンソール内のコードはeval'd' であるため、最終的な値を取得して出力します。

于 2012-10-07T13:56:59.593 に答える
1

これは、入力した内容が解釈されるためです。

{key:'value'}はブロックで、「値」を返します。key:'value'またはだけで同じ結果が得られ'value'ます。

オブジェクトを返す式が必要な場合は、 と入力し({key:'value'})ます。

于 2012-10-07T13:57:06.450 に答える