“什么是”呢&引用;用JavaScript真的吗?

“什么是”呢&引用;用JavaScript真的吗?,javascript,Javascript,这一个表示false,意思是“是一个数字: alert(isNaN("")); 这一个表示为NaN,意思是“不是一个数字,不能转换: alert(parseFloat("")); 我本来希望第二个代码将“转换为0,因为”在IsNaN中测试时是一个数字,但我错了!我是疯了还是错过了什么?isNaN转换为数字类型并检查值是否为特殊数字NaN 转换为数字的空字符串是0(+“”==0),由于0不是NaN,因此您会看到false 但是,这比简单的数字类型转换更复杂,它会为空字符串(parseFloa

这一个表示
false
,意思是
是一个数字:

alert(isNaN("")); 
这一个表示为
NaN
,意思是
不是一个数字,不能转换:

alert(parseFloat(""));

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

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

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


但是,这比简单的数字类型转换更复杂,它会为空字符串(
parseFloat(“”===NaN
)返回
NaN

parseFloat
尝试从字符串中解析一个数字,其中as
为NaN
,然后检查它:

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是一个NaN


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

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


或者任何可以通过JS语言的神秘转换规则转换为NaN的东西。

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

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

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


程序员倾向于过度使用
parseInt
parseFloat
进行强制,而在大多数情况下,他们应该使用
Number
,这更严格,也不容易混淆。

是一个字符串。嗯,这很有趣。“”将只是一个空字符串。基本上,您只是证明了isNaaN并没有使用与解析float相同的代码does@isbadawi谢谢,我编辑了我的问题,这样你就会明白我真正想要的是什么。以警告开始,“小心,这个函数坏了。”它接着解释了原因(并明确提到了空字符串)。确认行为的旁注:
isNaN(“NaN”)
返回
true
@leppie
isNaN(“pepperoni”)
:)@PaulP.R.O.:肯定是IEEE 794;再说一遍,“南”是什么意思?不是一个号码,对吗?删除“Not-a”至少在我看来是一个数字:@dpp
NaN
也是一个数字:
typeof NaN==“number”
NaN
是一个特殊的数字值。也许最好将其视为“表示0/0或无穷大/无穷大等操作结果的‘数字’”。是JavaScript将其解释为0还是isNaN函数?因为如果是JavaScript,那么PARSEFLASH为什么不考虑“0”呢?
0 !== 0 // false
NaN !== NaN //true

function isExactlyNaN(x) {
    return x !== x;
}