次の場合、nodejsのisNaN関数がfalseを返すのはなぜですか?
isNaN(''),isNaN('\n'),isNaN('\t')
これは非常に奇妙です。
isNaNの略は数字ではないと思ったので、誰かが何かアイデアを持っていますか。
誰かが明確にできますか
前もって感謝します!
数値を渡していないため、数値に変換されます。それらはすべて0
に変換されます。これは0
であり、NaN
ではありません。
Number('')
0
Number('\n')
0
Number('\t')
0
isNaN(0)
false
NaN
は「JavaScript番号ではない」を意味しないことに注意してください。 実際にはJavaScriptとは完全に分離されています そしてIEEE-754フロートをサポートするすべての言語に存在します。
何かがJavaScript番号であるかどうかを確認したい場合、チェックは
if (typeof value === "number") {
}
NaNは非常に特殊なものです。これは、IEEE754仕様( ウィキペディアの記事 )に従って、適切なNaNフラグが設定された浮動小数点値です。
文字列に数値が含まれているかどうかを確認する場合は、parseFloat(str)
( parseFloatのMDN )を実行できます。有効な数値コンテンツが見つからない場合、または数値を見つける前に無効な文字が見つかった場合は、NaN値が返されます。
したがって、isNaN(parseFloat(str))
を実行してみてください。投稿された3つの例すべてに対してtrue
が得られます。
isNan()
は、「数学的に定義されていない」ものを検出するのに役立つように設計されています。 0/0
-
node
> isNaN(0/0)
true
> isNaN(1/0)
false
> isNaN(Math.sqrt(-1))
true
> isNaN(Math.log(-1))
true
数字を検出する方法についてこの質問でここで得た他のアドバイスは確かです。
isNaNは「isNota Number」関数であり、パラメーターとして数値が指定されていない場合はtrueを返し、数値が指定されている場合はfalseを返します。