我想知道为什么以下程序的行为不同,尽管数据类型是一个字符串,
console.log(isNaN('Hello World!'))
console.log(isNaN(''))控制台显示以下结果,
true
false我希望这两个结果都是真的。
任何人都能帮助我理解这件基本的事情。
谢谢。
发布于 2020-09-09 06:21:41
根据文档
自从最早版本的isNaN函数规范以来,它对于非数值参数的行为一直令人困惑。当isNaN函数的参数不是Number类型时,该值首先被胁迫为一个数字。然后对结果值进行测试,以确定其是否为NaN。因此,对于非数字,当被胁迫为数字类型时,会产生一个有效的非NaN数值(特别是空字符串和布尔基元,它们在胁迫时给出数值为0或1),"false“返回的值可能是意外的;例如,空字符串肯定是”不是数字“。这种混淆源于这样一个事实,即“不是数字”这个词对于表示为IEEE-754浮点值的数字有一个特定的含义。这个函数应该被解释为回答以下问题:“当胁迫到一个数值时,这个值是IEEE-754‘而不是A’值吗?”
您可能希望使用Number.isNaN而不是isNan,它的行为有所不同(我提供的链接中也提到了这一点)。
发布于 2020-09-09 06:24:17
console.log(isNaN(''));
// false: the empty string is converted to 0 which is not NaN
console.log(isNaN(' '));
// false: a string with spaces is converted to 0 which is not NaN
欲知更多详情,请参阅官方文件:对象/isNaN
发布于 2020-09-09 06:36:51
如这所示
如果值等于isNanN(),则此函数( NaN ())返回true。否则它会返回
全局isNaN()函数,将测试的值转换为一个数字,然后测试它。
当您将给定的值转换为数字时,您将获得以下内容
Number("") = 0
Number("Hello World!") = NaN这解释了获得的结果。
https://stackoverflow.com/questions/63805757
复制相似问题