gpt4 book ai didi

javascript - Number.IsNaN() 比 isNaN() 更坏吗

转载 作者:IT王子 更新时间:2023-10-29 03:02:11 25 4
gpt4 key购买 nike

Soooooo isNaN 在 JavaScript 中显然是错误的,例如:

isNaN('')
isNaN(' ')
isNaN(true)
isNaN(false)
isNaN([0])

返回 false,当它们看起来都是……不是数字……

在 ECMAScript 6 中,草案包括一个新的 Number.isNaN 但看起来(imo)这也被破坏了......

我希望

Number.isNaN('RAWRRR')

要返回true,因为是字符串,不能转为数字...不过...

enter image description here

看来我会考虑的事情……不是一个数字,确实,不是,不是一个数字……

http://people.mozilla.org/~jorendorff/es6-draft.html#sec-isfinite-number

MDN 上的例子说:

Number.isNaN("blabla"); // e.g. this would have been true with isNaN

我不明白这是“原始全局 isNaN 的更强大版本”。当我无法检查事物是否不是数字时。

这意味着我们仍然要进行实际的类型检查以及检查 isNaN...这看起来很傻...

http://people.mozilla.org/~jorendorff/es6-draft.html#sec-isnan-number

这里的 ES3 草案基本上说,除了它的 Number.NaN 之外,一切都是假的

有没有其他人发现这个问题,或者我只是不理解 isNaN 的意义?

最佳答案

isNaN()Number.isNaN() 都测试一个值是否(或者,在 isNaN() 的情况下,可以转换为表示 NaN 值的数字类型值。换句话说,“NaN”并不仅仅意味着“这个值不是数字”,它具体意味着“根据 IEEE-754,这个值是一个 numeric Not-a-Number 值”。

以上所有测试返回 false 的原因是因为所有给定值都可以转换为不是 NaN 的数值:

Number('')    // 0
Number(' ') // 0
Number(true) // 1
Number(false) // 0
Number([0]) // 0

isNaN() 被“破坏”的原因是,从表面上看,类型转换不应该在测试值时发生。这就是 Number.isNaN() 旨在解决的问题。特别是,Number.isNaN()尝试将值与NaN 进行比较,前提是该值是数字类型的值。任何其他类型都将返回 false,即使它们实际上是“不是数字”,因为值 NaN类型 是数字。请参阅 isNaN() 的相应 MDN 文档和 Number.isNaN() .

如果您只是想确定一个值是否为数字类型,即使该值是NaN,也可以使用typeof相反:

typeof 'RAWRRR' === 'number' // false

关于javascript - Number.IsNaN() 比 isNaN() 更坏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25176459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com