これは、 が数字であることfalseを意味します。""
alert(isNaN(""));
これは、 が数値ではなく、変換できないことをNaN意味します。""
alert(parseFloat(""));
テストしたときは数字なので、2番目のコードが変換""されることを期待していましたが、間違っていました! 私は気が狂っていますか、それとも何かを逃しただけですか?0""IsNaN
これは、 が数字であることfalseを意味します。""
alert(isNaN(""));
これは、 が数値ではなく、変換できないことをNaN意味します。""
alert(parseFloat(""));
テストしたときは数字なので、2番目のコードが変換""されることを期待していましたが、間違っていました! 私は気が狂っていますか、それとも何かを逃しただけですか?0""IsNaN
parseFloat文字列から数値を解析しようとしますが、asは引数をチェックする前isNaN に数値に変換します。
Number("") //0 http://ecma-international.org/ecma-262/5.1/#sec-9.3.1
parseFloat("") //NaN http://ecma-international.org/ecma-262/5.1/#sec-15.1.2.3
どうやらこれは「壊れている」または「混乱している」ので、仕様から:
ECMAScriptコードが値XがNaNであるかどうかをテストするための信頼できる方法は、X!== Xの形式の式です。結果は、XがNaNである場合にのみ真になります。
0 !== 0 // false
NaN !== NaN //true
function isExactlyNaN(x) {
return x !== x;
}
isNaN数値タイプに変換し、値が特殊数値NaNであるかどうかを確認します。
数値に変換された空の文字列は0(+"" === 0)であり、0そうではないNaNのでfalse。
ただし、 parseFloatは、数値タイプへの単純な変換よりも複雑でありNaN、空の文字列(parseFloat("") === NaN)を返します。
ないNaNことは、数であることと同じではありません。それは、あなたが特別な価値を持っていないことを意味しますNaN。
またはNaN、JS 言語の難解な変換規則によって変換可能なもの。
この動作を理解するには、セマンティクスを理解することが重要です。
isNaN値を数値に強制変換できないかどうかをチェックします。値で呼び出すとfalseが返される場合は、Number(value)有効な数値が返されることを意味します。
parseFloat 文字列から数値を解析します。文字列がどの数値でも始まらない場合は、NaN解析する数値が見つからなかったため、を返します。
プログラマーは、ほとんどの場合、を使用する必要があるときに、使いすぎて強制parseIntする傾向があります。これは、より厳密で、それほど混乱することはありません。parseFloatNumber
Javascript は空の文字列を 0 として解釈し、isNaN テストに失敗します。parseFloat は空の文字列の数値を解析しようとしますが、失敗して NaN を返します。