JavaScriptが内蔵されますisNaNの関数である- 「ダイナミックタイプオペレータ」 -デフォルトでは、期待されるべきです。したがって、(DTCプロセス中に)単純なtrueを生成するすべての値| などのfalseは"", " ", " 000"
、NaNにはできません。
指定された引数が最初に次のように変換されることを意味します:
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
説明:
関数本体の最初の行では、(最初に)引数を数値オブジェクトに正常に変換しようとしています。そして、(第2)は、ドット演算子を使用して、我々は-私たち自身の便宜のために-すぐに、剥ぎ取りプリミティブ値作成されたオブジェクトのを。
2行目で、私たちは前のステップで得られた値、およびという事実を利用取っているのNaNは:例えば、いなくてもそれ自体に、宇宙に何にも等しくないNaN == NaN >> false
自分自身で最終的にそれを比較すること(不平等のために) 。
このようにして、関数returnは、指定されたargument-returnが数値オブジェクトへの変換に失敗した場合、つまり非数値の場合にのみtrueを返します。たとえば、NaN。
isNaNstatic()
ただし、静的型演算子の場合-必要に応じて、必要に応じて、次のようなはるかに単純な関数を記述できます。
function isNaNstatic(x){
return x != x;
}
また、引数が明示的にNaN数でない場合にfalseを返すように、DTCを完全に回避してください。したがって、以下に対するテスト:
isNaNStatic(" x"); // will return false
それはまだ文字列だからです。
ただしisNaNStatic(1/"x"); // will of course return true.
、たとえば次の
ようになりますisNaNStatic(NaN); >> true
。
しかしisNaN
、とは対照的に、isNaNStatic("NaN"); >> false
それ(引数)は通常の文字列であるためです。
ps:isNaNの静的バージョンは、最新のコーディングシナリオで非常に役立ちます。そして、これが私がこれを投稿するために時間を費やした主な理由の1つである可能性が非常に高いでしょう。
よろしく。