parseFloat("NaN")
「NaN」を返しますが、
parseFloat("NaN") == "NaN"
falseを返します。さて、それがfalseを返すのはおそらく良いことですが、これがどのように行われるのかわかりません。JavaScriptの作成者は、これを特別なケースにしましたか?そうでなければ、これがどのようにfalseを返すのか理解できないからです。
parseFloat("NaN")
「NaN」を返しますが、
parseFloat("NaN") == "NaN"
falseを返します。さて、それがfalseを返すのはおそらく良いことですが、これがどのように行われるのかわかりません。JavaScriptの作成者は、これを特別なケースにしましたか?そうでなければ、これがどのようにfalseを返すのか理解できないからです。
更新 2
ECMAScript 6 の新機能はObject.is()関数です。これは、===
チェックをさらに強化するように設計されています。この新しい関数の利点の 1 つは、Object.is(NaN, NaN)
true を返すようになったことです。ECMAScript 6 を利用できる場合、これが最も読みやすく一貫したソリューションになります。
オリジナル
これを確認する適切な方法は次のとおりです。
isNaN(parseInt(variable))
チェックしているものが NaN の場合、その関数は true を返します。このメソッドは JavaScript 仕様に組み込まれています。
jQuery の使用
jQuery は元々、ブラウザー間の不一致に対処するために独自のisNaN
関数を組み込み、いくつかの追加チェックを追加して、VanillaJS のバージョンの代わりにそれらのバージョンを使用できるようにしました。
jQuery の更新
jQuery 1.7 以降、この関数は に変更されました$.isNumeric()
。
この Stack Overflow questionを見るisNaN()
と、直観的には「正しくない」回答と見なされるが、仕様では正しい回答が返される場合がたくさんあることがわかります。
バニラを避ける大きな理由の 1 つは、isNaN()
それnull
が を返すfalse
ため、数字だと思わせることです。ただし、jQuery 関数は、はるかに広い範囲の直感的な結果をカバーしています。
ドキュメントから:
jQuery 3.0 以降、 $.isNumeric() は、引数が数値型の場合、または文字列型で有限数に強制できる場合にのみ true を返します。それ以外の場合はすべて false を返します。
JavaScript 関数が を返す場合NaN
、これはリテラル文字列ではなく、グローバル空間のオブジェクト プロパティです。string と比較することはできません"NaN"
。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaNを参照してください
これは特殊なケースです。NaN は Javascript でそれ自体と等しくない唯一のものです。
文字列と NaN オブジェクトに関する他の回答も正しいですが。
NaN
それ自体と等しくないオブジェクトの数少ない例の 1 つです。実際、このプロパティは共通bool IsNaN(number)
メソッドを実装するために使用されます。
function isNaN(x)
{
return x != x;
}
isNaN
数値ではないすべての値に対して機能します
isNaN('foo') == true // a string is indeed not a number
isNaN(NaN) == true
isNaN(12) == false
isNaN([1,2,3]) == true // an array is also not a number
ただし、具体的に確認したい場合NaN
、または型強制を回避したい場合。代わりに
使用できますNumber.isNaN
Number.isNaN('foo') == false
Number.isNaN(NaN) == true
Number.isNaN(12) == false
Number.isNaN([1,2,3]) == false
Number
(ParseFloat によって返される) と比較してstring
string
変換された場合Number
NaN
は他のどのオブジェクトとも等しくありません ( を含むNaN
)あなたが得るNaN==NaN
。2 番目のルールでは false です。