web-dev-qa-db-ja.com

nodejsのisNaN関数

次の場合、nodejsのisNaN関数がfalseを返すのはなぜですか?

isNaN(''),isNaN('\n'),isNaN('\t')

これは非常に奇妙です。

isNaNの略は数字ではないと思ったので、誰かが何かアイデアを持っていますか。

誰かが明確にできますか

前もって感謝します!

10
azero0

数値を渡していないため、数値に変換されます。それらはすべて0に変換されます。これは0であり、NaNではありません。

Number('')
0
Number('\n')
0
Number('\t')
0
isNaN(0)
false

NaNは「JavaScript番号ではない」を意味しないことに注意してください。 実際にはJavaScriptとは完全に分離されています そしてIEEE-754フロートをサポートするすべての言語に存在します。

何かがJavaScript番号であるかどうかを確認したい場合、チェックは

if (typeof value === "number") {

}
14
Esailija

NaNは非常に特殊なものです。これは、IEEE754仕様( ウィキペディアの記事 )に従って、適切なNaNフラグが設定された浮動小数点値です。

文字列に数値が含まれているかどうかを確認する場合は、parseFloat(str)parseFloatのMDN )を実行できます。有効な数値コンテンツが見つからない場合、または数値を見つける前に無効な文字が見つかった場合は、NaN値が返されます。

したがって、isNaN(parseFloat(str))を実行してみてください。投稿された3つの例すべてに対してtrueが得られます。

4
Phil H

isNan()は、「数学的に定義されていない」ものを検出するのに役立つように設計されています。 0/0-

node
> isNaN(0/0)
true
> isNaN(1/0)
false
> isNaN(Math.sqrt(-1))
true
> isNaN(Math.log(-1))
true

数字を検出する方法についてこの質問でここで得た他のアドバイスは確かです。

3
Uberbrady

isNaNは「isNota Number」関数であり、パラメーターとして数値が指定されていない場合はtrueを返し、数値が指定されている場合はfalseを返します。

0
manespgav