- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Soooooo isNaN
在 JavaScript 中显然是错误的,例如:
isNaN('')
isNaN(' ')
isNaN(true)
isNaN(false)
isNaN([0])
返回 false,当它们看起来都是……不是数字……
在 ECMAScript 6 中,草案包括一个新的 Number.isNaN
但看起来(imo)这也被破坏了......
我希望
Number.isNaN('RAWRRR')
要返回true,因为是字符串,不能转为数字...不过...
看来我会考虑的事情……不是一个数字,确实,不是,不是一个数字……
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/
我是一名优秀的程序员,十分优秀!