その結果、indexOf メソッドを使用して NaN を含む配列内で NaN を見つけることはできません。これは、メソッドが内部で === を使用して要素が次と等しいかどうかを判断するためです。パラメータで指定された値:
NaN を検出するために === を使用できない場合、何を使用すればよいでしょうか? グローバル関数 isNaN() がありますが、この関数には問題があります。つまり、パラメータの値が常に暗黙的に に変換されます。明らかに NaN ではない多くの値を判定する場合にも true を返します:
もう 1 つのよりわかりやすい方法は、isNaN() を使用する前に、値が数値型であるかどうかを確認することです。これにより、暗黙的な変換の問題が回避されます。 >
3. ECMAScript.next のより厳密な等価性: "is" 演算子 ECMAScript.next には
"is" 演算子が含まれます。 、その機能は「より厳密な等価性」です。
NaN をそれ自体と等しいと見なすことができ、また、-0 と 0 を区別することもできます。 「isnt」と呼ばれる反対の演算子もあります。例:
> NaN は NaN
true
> -0 は 0 ではありません
true
現在、この演算子は Object.is() メソッド で補正できます。このメソッドは 次のように実装できます:
Object.is = function(x, y) {
if (x === y) ) {
// x === 0 => 0 と -0 を比較します
return x !== 0 || (1/x === 1/y);
// x !== y => x と y が両方とも NaN の場合にのみ true を返します
return x !== x && y !== y;
3.1 Object.is() を試してみる
Object.is()
を試したい場合は、
es6-shim を使用できます。これにより、一部の機能を ECMAScript.next (ECMAScript 6) から ECMAScript 5 に移植できます。 .
翻訳者注: ES3 環境で使用したい場合は、es5-shim
参照
を使用する必要があります。
JavaScript における等価性: === 対 ==
- ECMAScript.next: Eich による「TXJS」アップデート
- JavaScript における NaN と無限大
- es6-shim – ECMAScript 5 の ECMAScript 6 機能