什么是""在JavaScript中真的吗?

时间:2012-06-07 05:14:49

标签: javascript

这个说false,意味着""是一个数字:

alert(isNaN("")); 

这个说NaN,意味着""不是数字且无法转换:

alert(parseFloat(""));

我期待第二个代码将""转换为0,因为在""中测试时IsNaN是一个数字,但我错了!我疯了还是我错过了什么?

5 个答案:

答案 0 :(得分:3)

在检查之前,

parseFloat尝试解析字符串中的数字isNaN converts the argument to number

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;
}

答案 1 :(得分:1)

isNaN转换为Number类型并检查该值是否为特殊数字NaN。

转换为数字的空字符串为0+"" === 0),由于0不是NaN,您会看到false

然而,

parseFloat比简单转换为数字类型更复杂,它会为空字符串(NaN)返回parseFloat("") === NaN

答案 2 :(得分:1)

不是NaN与数字不同。这只是意味着你不是非常特殊的值NaN

或任何可通过JS语言的神秘转换规则转换为NaN的内容。

答案 3 :(得分:0)

Javascript将空字符串解释为0,无法通过isNaN测试。至于parseFloat尝试解析失败的空字符串中的数字并返回NaN ..

答案 4 :(得分:0)

要理解这种行为,理解语义很重要。

isNaN检查值是否强制为数字,如果在值上调用它返回false,则表示Number(value)将返回有效数字。

parseFloat 从字符串中解析数字,如果字符串不以任何数字开头,则返回NaN,因为找不到要解析的数字。

程序员倾向于过度使用parseIntparseFloat进行强制攻击,而在大多数情况下,他们应该使用Number,这更严格而且不会让人感到困惑。