JavaScript: NaN是对象还是原始值?

11

NaN是对象还是原始类型?

NaN - 非数字


NaN是Number类的一个属性。 - user657496
1
typeof NaN == "number" - Michael Berkowski
1
NaN 就像是 NULL。你可以参考这个 SO 帖子 - avani gadhai
1
@rsplak:NaN也是全局对象的一个属性,两者的值都为NaN - Andy E
1
请查看此处的规范herehere,以获取有关NaN的更多信息。 - Felix Kling
@avanigadhai 不完全是这样。null实际上是一种类型,只有一个值:null - kapa
4个回答

15

这是一个原始值。有多种方式可以进行检查:

  • typeof NaN返回的结果是"number",而不是"object"。

  • 添加属性后,它会消失。NaN.foo = "hi"; console.log(NaN.foo) // undefined

  • NaN instanceof Number的结果是false(但我们知道它是一个数字,所以它必须是一个原始值)。

如果 NaN 是一个对象,会让人感到迷惑,因为像 0 / 0 这样的表达式需要得到 NaN 的结果,而且数学运算总是产生原始值。如果将 NaN 定义为一个对象,也意味着它不能在某些情况下充当假值。


1
请注意,NaN!== NaN会返回true。 - A. Kürşat UZUN

9

NaN是一个原始的数字值。就像12等一样。


2
NaN是全局对象的一个属性。
NaN的初始值为Not-A-Number,与Number.NaN的值相同。在现代浏览器中,NaN是一个不可配置、不可写的属性。即使不是这种情况,也要避免覆盖它。
在程序中使用NaN相当罕见。当Math函数失败(Math.sqrt(-1))或尝试解析数字的函数失败(parseInt("blabla"))时,它是返回的值。 参考资料

0

想要添加一些关于 NaN 的观察,这让我感到很有趣:

  1. typeof(NaN) 返回 'number',但是 isNaN(NaN) 返回 true

有趣。

另外,

  1. isNaN(10)isNaN('10') 都返回 false

  2. isNaN('') 返回 false,但是 isNaN('任何字母字符串') 返回 true

  3. isNaN(true)isNaN(false) 都返回 false。所以布尔值也被 isNaN 函数视为数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接