空の配列 空の配列: 空の連結
2 つの空の配列を追加すると、JavaScript はそれらを次のように変換します。まずはプリミティブ。この場合、配列のデフォルト値は空の文字列であるため、結果は 2 つの空の文字列を連結した空の文字列になります。
空の配列オブジェクト: オブジェクトのサニタイズ
空の配列をプリミティブ (空の文字列) に変換し、オブジェクトをプリミティブ (その文字列表現、"[object Object]") の結果、空の文字列とオブジェクト表現が連結され、「[object Object]」が生成されます。
オブジェクトの空の配列: JavaScript の型破りな算術
動画とは異なり、提供されている JSFiddle では、{} [] の結果は 0 ではなく [Object] です。空のブロック {} がブロック ステートメントとして解釈され、空と評価されるため、矛盾が発生します。単項演算子は空の値を数値に変換し、結果は 0 になります。ただし、これを関数の引数内で使用しているため、ステートメントは強制的に式ステートメントとして解釈されます。これにより、{} が空のブロックではなく空のオブジェクト リテラルとして解析され、[Object] が生成されます。
Object オブジェクト: 不一致の出力
結果{} {} は「object Object」である必要がありますが、JSFiddle は異なる結果を示します。この矛盾は、2 つのオブジェクトを文字列に追加した結果が異なる可能性がある JavaScript の実装固有の動作が原因であると考えられます。
Array(16).join("wat" - 1): NaN Propagation
この式の入力文字列は「NaN-1」で、NaN と評価されます。 JavaScript が「NaN」と配列の空の文字列要素を連結しようとすると、連結アルゴリズムに従って結果は常に NaN になります。
"wat" 1 対 "wat" - 1: 文字列と. 数値変換
「wat」1 では、JavaScript は 1 を文字列に変換します。 「わ1。」一方、「ワット」 - 1 では、「ワット」を数値に変換しようとします。結果は NaN になります。連結演算子は最初の引数として文字列を必要とするため、NaN は文字列に変換され、その結果「NaN」が繰り返されます。
以上がJavaScript が文字列と数値の連結および算術演算で予期しない結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。