ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript におけるより厳密な平等 [翻訳]_javascript のヒント

JavaScript におけるより厳密な平等 [翻訳]_javascript のヒント

WBOY
WBOYオリジナル
2016-05-16 17:49:51997ブラウズ
1. NaN を検出します
数学的には、任意の値 x は常にそれ自体と等しくなります:

x = x

ただし、この規則は = == および = == には適用されません。 NaN:
コードをコピーします コードは次のとおりです。

>
false

その結果、indexOf メソッドを使用して NaN を含む配列内で NaN を見つけることはできません。これは、メソッドが内部で === を使用して要素が次と等しいかどうかを判断するためです。パラメータで指定された値:
コードをコピー コードは次のとおりです。

> ; [ NaN ].indexOf(NaN)
-1

翻訳者注: 同じことが switch ステートメントにも当てはまります
コードをコピー コードは次のとおりです。

switch (NaN) {
case NaN:alert(NaN)
}

NaN を検出するために === を使用できない場合、何を使用すればよいでしょうか? グローバル関数 isNaN() がありますが、この関数には問題があります。つまり、パラメータの値が常に暗黙的に に変換されます。明らかに NaN ではない多くの値を判定する場合にも true を返します:
コードをコピー コードは次のとおりです:

> isNaN("foo")
true

説明: "foo" は数値 NaN に変換されます。
コードをコピーします コードは次のとおりです。
> Number("foo")
NaN

NaN を検出するもう 1 つの方法 この方法は、NaN をそれ自体と厳密に等しくない唯一の値として使用することです:

コードをコピーします コードは次のとおりです。
function myIsNaN(value) {
return value
}

もう 1 つのよりわかりやすい方法は、isNaN() を使用する前に、値が数値型であるかどうかを確認することです。これにより、暗黙的な変換の問題が回避されます。 >

コードは次のとおりです。
function myIsNaN2(value) { return typeof value === 'number' && isNaN(value); ECMAScript.next Number.isNaN() メソッドには、

2 の修正バージョンが追加されます。 between -0 and 0


このような要件はまれですが、JavaScript では 0 (正のゼロ) と -0 (負のゼロ) を区別する必要がある場合があります。これらは 2 つの異なる値です。しかし === はわかりません:



コードをコピー

コードは次のとおりです。
> -0 === 0 true では、JavaScript では、正の数を −0 で割ると、結果は -Infinity になります。結果は Infinity です。これら 2 つの無限値は、次の === を使用して判断できます。


コードをコピーします。

コードは次のとおりです。 :
> 1 / -0 -無限大 > 1 / 0 無限大
>
false


翻訳者注: 関数として記述されています




コードをコピー

コードは次のとおりです
function isPositiveZero(zero){ return 1/ zero === Infinity } function isNegativeZero(zero){ return 1/ゼロ === -無限大
}



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 における等価性: === 対 ==
  1. ECMAScript.next: Eich による「TXJS」アップデート
  2. JavaScript における NaN と無限大
  3. es6-shim – ECMAScript 5 の ECMAScript 6 機能
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。