JavaScript で [NaN].includes(NaN) が true を返すのはなぜですか? 質問する

JavaScript で [NaN].includes(NaN) が true を返すのはなぜですか? 質問する

NaN私はJavaScriptで「奇妙」であること、つまり、NaN === NaN常に を返すことに慣れていますfalseここ===したがって、をチェックするために比較を行うのではなくNaN、代わりに isNaN(..) を使用する必要があります。

それで私は驚きました

> [NaN].includes(NaN)
true

一貫性がないようです。なぜこのような動作になるのでしょうか?

それはどのように機能するのでしょうか?includesメソッドは具体的にチェックしますかisNaN?

ベストアンサー1

によると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 の扱い。

ここに画像の説明を入力してください


追加リソース:

おすすめ記事