CodeMash 2012 の「ワット」トークでは、JavaScript におけるいくつかの不可解な動作が明らかになりました。ここでは、基礎となるメカニズムを詳しく調べ、JSFiddle の例で観察された結果について説明します。
[] + [] result: ""
配列を結合した結果の空の文字列は、演算子が変換することを強調表示します。両方のオペランドをプリミティブに設定し、配列に対して toString() を呼び出します。空の配列の場合、この変換により空の文字列が生成されます。
[] + {} result: [Object]
前と同様に、空の配列をプリミティブに変換すると、空の文字列が得られます。ただし、オブジェクトは toString() メソッドを使用して文字列に強制変換され、結果は「[Object]」になります。この文字列は空の文字列と連結され、「[Object]」が生成されます。
{} + [] result: [Object]
ここでの {} は空のブロックとして解釈され、空のプリミティブになります。価値。次に、オペレーターは toString() を介してオブジェクトを文字列に変換しようとし、「[Object]」が生成されます。ただし、ビデオが示すように、この動作は異常であり、結果は 0 になるはずです。
{} + {} result: [Object][Object]
前のケースと同様に、オブジェクトは文字列に強制されます。ただし、単項演算子がないため、結果は数値に変換されません。代わりに、「[Object]」と「[Object]」の連結が返されます。
result: NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
数値の減算文字列からの結果は NaN になります。 Array.join に引数として渡されると、(toString() 経由で) 文字列に変換されると「NaN」が生成されます。次に、配列の join() メソッドがこの文字列を繰り返し連結し、観察された結果が得られます。
これらの特異な動作は、値をプリミティブに変換するための特定のルールと演算子の動作に起因します。 JavaScriptで。直観に反するものもあるかもしれませんが、基礎となるメカニズムを理解することで、開発者はこれらの癖をより適切に予測し、独自のコードで処理できるようになります。
以上がJavaScript で配列やオブジェクトを追加すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。