Javascript 伊斯南(';你好,世界!';)对伊斯南(';';)

Javascript 伊斯南(';你好,世界!';)对伊斯南(';';),javascript,Javascript,我想知道,尽管数据类型是字符串,但为什么下面的程序行为不同 console.log(isNaN('Hello World!')) console.log(isNaN('')) 控制台显示以下结果 true false 我希望这两个结果都是真的 任何人都可以帮助我理解这个基本的东西 谢谢。isNaN将空字符串解释为0,这使得isNaN(“”)为true,而对于字符串,isNaN('abc')为false,因为它不是数字,根据: 自从最早版本的isNaN函数规范以来,它对非数值参数的行为一直

我想知道,尽管数据类型是字符串,但为什么下面的程序行为不同

console.log(isNaN('Hello World!'))

console.log(isNaN(''))
控制台显示以下结果

true

false
我希望这两个结果都是真的

任何人都可以帮助我理解这个基本的东西


谢谢。

isNaN将空字符串解释为0,这使得isNaN(“”)为true,而对于字符串,isNaN('abc')为false,因为它不是数字,根据:

自从最早版本的isNaN函数规范以来,它对非数值参数的行为一直令人困惑。当isNaN函数的参数不是Number类型时,该值首先强制为一个数字。然后测试结果值以确定其是否为NaN。因此,对于强制为数字类型时产生有效非NaN数值的非数字(尤其是空字符串和布尔基元,强制时给出数值零或一),“false”返回值可能是意外的;例如,空字符串肯定是“不是数字”。混淆源于“不是数字”一词对表示为IEEE-754浮点值的数字有特定的含义。该函数应解释为回答以下问题:“当强制为数值时,该值是否为IEEE-754‘不是数字’值?”

您可能希望使用
Number.isNaN
而不是
isNaN
,它的行为不同(我提供的链接中也提到了这一点)

console.log(isNaN(“”));

//false:空字符串转换为0,该值不是NaN console.log(isNaN(“”)); //false:带空格的字符串转换为0,该字符串不是NaN
,如中所示

如果值等于NaN,则此函数(isNanN())返回true。否则它将返回

函数的作用是:将被测值转换为一个数字,然后对其进行测试

当您将给定值转换为数字时,您将获得

Number("") = 0 
Number("Hello World!") = NaN

这解释了获得结果的原因。

混淆特殊情况行为
尝试
+“你好,世界!”vs
+'
。。。强制可能会引起混乱-而且<代码>isNan('1')
为false。。。然而,
'1'
是一个字符串…
将空字符串解释为0
不准确空字符串被转换为0,这不是NaN-希望这就是你要说的