ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript が配列とオブジェクトの連結で予期しない結果を生成するのはなぜですか?

JavaScript が配列とオブジェクトの連結で予期しない結果を生成するのはなぜですか?

DDD
DDDオリジナル
2024-12-14 20:10:26348ブラウズ

Why Does JavaScript Produce Unexpected Results with Array and Object Concatenation?

JavaScript の奇妙な動作が明らかに

CodeMash 2012 での興味深い「ワット」講演では、JavaScript のいくつかの奇妙な動作が強調されました。これらの癖を詳しく調べて、関係する基礎的なメカニズムを明らかにしましょう。

[配列] [配列]

[] + []

期待される結果: 空の文字列

説明: JavaScript では、演算子は配列を変換しますオペランドをプリミティブに変換すると、配列が空の文字列になります。その後、これらの文字列を連結して、空の文字列を生成します。

[Array] [Object]

[] + {}

期待される結果: '[Object]'

説明: 両方のオペランドが再び次のように変換されます。プリミティブ。配列のデフォルトは空の文字列ですが、オブジェクトの場合は「[object Object]」が生成されます。演算子はそれらを連結し、'[Object]' になります。

[Object] [Array]

{} + []

期待される結果: [Object]

説明: この場合、JavaScript は {} を空のブロック ステートメントとして扱います。空の値を返します。したがって、ビデオで提案されているように、演算子は [Array] をプリミティブ (空の文字列) に変換し、0 ではなく [Object] を返します。

[Object] [Object]

{} + {}

期待される結果:オブジェクト

説明: 前の例と同様に、両方のオペランドは空の文字列に変換されます。ただし、演​​算子は関数の引数コンテキストで使用されるため、ブロック解析ルールはオーバーライドされ、{} は空のオブジェクト リテラルとして解釈されます。 2 つの空のオブジェクトを連結すると、'Object' が生成されます。

Array(16).join("wat" - 1)

Array(16).join("wat" - 1)

期待される結果: NaN が 16 回繰り返されました

説明: オペランド数値に変換されます。 "wat" - 1 は NaN (数値ではない) となり、文字列 ("NaN") に変換されます。 join() メソッドは、「NaN」文字列を 16 回連結します。

ビデオでは、代わりに「wat」1 が使用されており、加算演算子は 1 を文字列に変換し、その結果「wat1」が 16 回連結されます。

これらの複雑な動作は、JavaScript 言語仕様で定義されている暗黙的な型変換と演算子のセマンティクスに起因することがよくあります。これらの複雑さを理解することは、開発者が問題を解決し、この多用途言語で堅牢なコードを作成するのに役立ちます。

以上がJavaScript が配列とオブジェクトの連結で予期しない結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。