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
より詳しい説明:
- 同じ値ゼロの等価性に似ている同じ価値の平等、しかし、+0と-0は等しいとみなされる。
- 同じ価値の平等は、オブジェクト.is()
Object.is()
方法:との唯一の違い===
は符号付きゼロと NaN の扱い。