JavaScript中Null、NaN和undefined之间有什么区别?

12

在JavaScript中,nullNaNundefined有什么区别?

我已经遇到过这三个值,并且理解它们在我找到它们的上下文中表示“这里没有任何东西”,但我希望能得到更详细的解释,以了解它们发生的原因以及它们在不同上下文中的含义(例如- 数组、类或变量)。


它们的类型不同,通常使用的上下文也不同。 - Bergi
@Bergi,是的我明白这一点,但我希望得到更详细的答案。我也考虑到了初学者的角度来提问。 - Alex Mulchinock
1个回答

29

NaN: 不是一个数: 如字面意思所示,它用于表示对象的值不是数字。有许多方法可以生成此错误,其中之一是无效的数学运算,如0/0或sqrt(-1)。

undefined: 它意味着对象没有任何值,因此是未定义的。当您创建一个变量并没有为其分配一个值时,就会出现这种情况。

null: 它表示对象为空,并且没有指向任何内存地址。


7
NaN表示“不是一个有效的数字”,通常在进行某些应该产生数字结果但无法完成的操作后出现。undefined表示它存在,但尚未被赋值。null表示它存在,并且被故意赋予了一个空值。这就是它们背后的基本思想——基本上是三个不同的“非值”标识符。当然,人们可以根据需要使用它们,但一般来说它们是被理解为这样的。 - VLAZ
1
@vlaz 当访问不存在的事物时,“undefined”是默认值。 - Bergi
2
@Bergi 嗯,这取决于你的定义。对我来说是有意义的,因为如果你执行 obj.missingValue,即使 missingValue 属性不存在,对象 也存在。同样,对只有一个元素的数组执行 arr[42] 会产生 undefined,但 arr 本身是存在的。因此,也许更正确的说法是你可以访问某个东西,但它还没有被赋值。 - VLAZ

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