ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript で「 [[]][ []] [ []]」が 10 に等しいのはなぜですか?

JavaScript で「 [[]][ []] [ []]」が 10 に等しいのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-15 10:29:02612ブラウズ

Why does

JavaScript における「[[]][ []] [ []]」の謎を探る

JavaScript 開発者は困惑するかもしれません式 " [[]][ []] [ []]" を使用すると、予期しない結果 "10" が得られます。この謎めいた計算の背後にあるプロセスを掘り下げて、その複雑さを解明しましょう。

分析

式を分解すると、次のようになります。

++[[]][+[]]
+
[+[]]

JavaScript では、「 」を使用して配列要素を強制的に数値に変換できます。オペレーター。具体的には、[] === 0 です。これにより、配列が空の文字列に強制され、結果は "" === 0 になります。

計算の簡略化

これを理解すると、式は次のように簡略化できます。

++[[]][0]
+
[0]

の最初の要素にアクセスする配列 [[]][0] は内部配列を返します。参照のため、混乱を避けるためにこれを A と呼びます。

インクリメントと変換

演算子はオペランドを 1 つインクリメントし、インクリメントされた結果を返します。したがって、[[]][0] は Number(A) 1 と同等です。

文字列連結

さらに簡略化できます:

(+[] + 1)
+
[0]

まず、[] が文字列「0」に強制されます。次に、 [] の結果は 1 になります。最後に、配列は で結合できるため、 を使用して「1」と「0」が連結され、結果は 10 になります。

Technicalities

舞台裏で [] を 0 に強制するプロセスにはいくつかの仕様が含まれます参照:

  • 単項演算子: オペランドを数値に変換し、最初に文字列 ("") に強制します。
  • 数値変換 ( ToNumber()): 配列 ([]) を強制的に文字列に変換します("").
  • プリミティブ値変換 (ToPrimitive()): 文字列モードでは、オブジェクトの [[DefaultValue]] メソッドを使用します。
  • [ [DefaultValue]]: 引数を指定して [[Get]] メソッドを呼び出します"toString".
  • 配列の toString メソッド: [[Join]] メソッドを呼び出し、[] に対して "" を生成します。

結論

この段階的な分析を通じて、私たちは次のことを実現しました。 JavaScript の不可解な表現「[[]][ []] [ []]」の背後にある仕組みに光を当てます。その実行には強制、増分、連結が含まれ、最終的には「10」という驚くべき結果につながる論理的な行程が明らかになります。

以上がJavaScript で「 [[]][ []] [ []]」が 10 に等しいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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