1. ホーム
  2. javascript

[解決済み] Javascriptで ",,," == Array(4) が使えるのはなぜですか?

2022-08-23 09:41:42

質問

インタープリタ/コンソールを起動し、以下の比較を試してみてください。

> ",,," == Array(4)
True

どうしてですか? 最初は、",,,"は4文字の配列で、終端スライスは' \0' と考えることができるので、それが理由かもしれないと思いましたが。

> "..." == Array(4)

"False"を返します。 それで...なぜですか? Javascriptのアヒルのタイピングのような特異なものであることは分かっていますが、この動作の根底にあるものが何であるかに興味があります。 Zed Shawの素晴らしい論文から得たものです。 プレゼンテーションから得たものです。 .

どのように解決するのですか?

右側のオペランドは文字列に変換されるため、文字列表現である Array(4),,, :

> Array(4).toString()
  ",,,"

配列のコンストラクタ関数を使って数値を渡すと、配列の長さがその数値に設定されます。つまり、4つの空のインデックスがあると言うことができます(同じように [,,,] のように)、配列のデフォルトの文字列表現は、その要素のカンマ区切りリストです。

> ['a','b','c'].toString()
  "a,b,c"


比較がどのように行われるかは、セクション 11.9.3節に記載されています。 . そこでは、( x == y ):

8. もしType( x ) が String または Number で、Type( y )はObjectです。

比較の結果を返す x == プリミティブ ( y ).

(配列はJavaScriptではオブジェクトです)

を辿っていくと ToPrimitive メソッドを追っていくと、最終的に toString .