1. ホーム
  2. javascript

[解決済み] JavaScriptで[NaN].includes(NaN)がtrueを返すのはなぜですか?

2022-06-26 17:11:33

質問

私がよく知っているのは NaN が JavaScript で "weird" であること、つまり。 NaN === NaN は常に false を返します。 ここで . ですから === をチェックするために、比較のために NaN をチェックしますが、代わりに isNaN(...) を使用します。

ということを発見して、私は驚きました。

> [NaN].includes(NaN)
true

これは矛盾しているように思えます。なぜこのような動作になるのでしょうか?

どのように動作するのでしょうか?また includes メソッドは特に isNaN ?

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

によると MDN のドキュメント によると

注:技術的に言えば includes() sameValueZero アルゴリズムを使用して、与えられた要素が見つかったかどうかを判断します。

const x = NaN, y = NaN;
console.log(x == y); // false                -> using ‘loose’ equality
console.log(x === y); // false               -> using ‘strict’ equality
console.log([x].indexOf(y)); // -1 (false)   -> using ‘strict’ equality
console.log(Object.is(x, y)); // true        -> using ‘Same-value’ equality
console.log([x].includes(y)); // true        -> using ‘Same-value-zero’ equality


より詳細な説明。

  1. 同一値ゼロの等価性 と同様 同一値一致 , が、+0 と -0 は等しいとみなされる .
  2. 同一値一致 が提供されます。 オブジェクト.is() メソッドによって提供されます。との唯一の違いは Object.is()=== の符号付きゼロと NaN の処理にあります。


追加のリソース