CodeMash 2012 での興味深い「ワット」講演では、JavaScript のいくつかの奇妙な動作が強調されました。これらの癖を詳しく調べて、関係する基礎的なメカニズムを明らかにしましょう。
[] + []
期待される結果: 空の文字列
説明: JavaScript では、演算子は配列を変換しますオペランドをプリミティブに変換すると、配列が空の文字列になります。その後、これらの文字列を連結して、空の文字列を生成します。
[] + {}
期待される結果: '[Object]'
説明: 両方のオペランドが再び次のように変換されます。プリミティブ。配列のデフォルトは空の文字列ですが、オブジェクトの場合は「[object Object]」が生成されます。演算子はそれらを連結し、'[Object]' になります。
{} + []
期待される結果: [Object]
説明: この場合、JavaScript は {} を空のブロック ステートメントとして扱います。空の値を返します。したがって、ビデオで提案されているように、演算子は [Array] をプリミティブ (空の文字列) に変換し、0 ではなく [Object] を返します。
{} + {}
期待される結果:オブジェクト
説明: 前の例と同様に、両方のオペランドは空の文字列に変換されます。ただし、演算子は関数の引数コンテキストで使用されるため、ブロック解析ルールはオーバーライドされ、{} は空のオブジェクト リテラルとして解釈されます。 2 つの空のオブジェクトを連結すると、'Object' が生成されます。
Array(16).join("wat" - 1)
期待される結果: NaN が 16 回繰り返されました
説明: オペランド数値に変換されます。 "wat" - 1 は NaN (数値ではない) となり、文字列 ("NaN") に変換されます。 join() メソッドは、「NaN」文字列を 16 回連結します。
ビデオでは、代わりに「wat」1 が使用されており、加算演算子は 1 を文字列に変換し、その結果「wat1」が 16 回連結されます。
これらの複雑な動作は、JavaScript 言語仕様で定義されている暗黙的な型変換と演算子のセマンティクスに起因することがよくあります。これらの複雑さを理解することは、開発者が問題を解決し、この多用途言語で堅牢なコードを作成するのに役立ちます。
以上がJavaScript が配列とオブジェクトの連結で予期しない結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。