5

これは、 が数字であることfalseを意味します。""

alert(isNaN("")); 

これは、 が数値ではなく、変換できないことをNaN意味します。""

alert(parseFloat(""));

テストしたときは数字なので、2番目のコードが変換""されることを期待していましたが、間違っていました! 私は気が狂っていますか、それとも何かを逃しただけですか?0""IsNaN

4

5 に答える 5

4

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;
}
于 2012-06-07T05:19:32.620 に答える
1

isNaN数値タイプに変換し、値が特殊数値NaNであるかどうかを確認します。

数値に変換された空の文字列は0+"" === 0)であり、0そうではないNaNのでfalse

ただし、 parseFloatは、数値タイプへの単純な変換よりも複雑でありNaN、空の文字列(parseFloat("") === NaN)を返します。

于 2012-06-07T05:19:01.670 に答える
1

ないNaNことは、数であることと同じではありません。それは、あなたが特別な価値を持っていないことを意味しますNaN

またはNaN、JS 言語の難解な変換規則によって変換可能なもの。

于 2012-06-07T05:21:32.867 に答える
0

この動作を理解するには、セマンティクスを理解することが重要です。

isNaN値を数値に強制変換できないかどうかをチェックします。値で呼び出すとfalseが返される場合は、Number(value)有効な数値が返されることを意味します。

parseFloat 文字列から数値を解析します。文字列がどの数値でも始まらない場合は、NaN解析する数値が見つからなかったため、を返します。

プログラマーは、ほとんどの場合、を使用する必要があるときに、使いすぎて強制parseIntする傾向があります。これは、より厳密で、それほど混乱することはありません。parseFloatNumber

于 2012-06-07T16:25:03.000 に答える
0

Javascript は空の文字列を 0 として解釈し、isNaN テストに失敗します。parseFloat は空の文字列の数値を解析しようとしますが、失敗して NaN を返します。

于 2012-06-07T05:20:32.843 に答える