在javascript中为空和未定义

时间:2012-01-18 11:17:37

标签: javascript null undefined

在Javascript中,我读过我们可以为undefined定义自己的值。最初undefined == nulltrue

  1. 我们更改undefined的值undefined == null后仍为true
  2. 通过将自己的值分配给undefined是否意味着我们可以为其分配实数?
  3. 为什么有两个像nullundefined一样没有价值的东西?难道我们不能只用一个吗?它们之间有什么区别吗?

4 个答案:

答案 0 :(得分:4)

请注意,在较旧的JS版本中,undefined不是null的关键字。您可以为undefined定义一个值,因为它只是一个变量。

var null; // syntax error
null = 0; // another error
var undefined; // not an error
undefined = null; //not an error

然而,这样做是个坏主意,因为它可能会破坏您使用的第三方代码。 ECMAScript 5在undefined property上定义了一个只读global object(注意:仍然不是关键字),所以你不能在ES5兼容的JS实现中分配它。

至于在为undefined == null分配值后是否null,就像foo == null一样,它完全取决于您分配给undefined的值。

答案 1 :(得分:4)

  

但是在我们更改undefined的值后,undefined == null仍然是真的吗?

这取决于你改变它的方式。如果您将其更改为null,则为是。如果你把它改成其他任何东西,那么没有。只是不要改变它。

  

通过将我们自己的值分配给undefined,是否意味着我们可以为其分配实数?

嗯,是的。你没试过吗?

  

最后为什么有两个没有价值的东西,比如null和undefined?难道我们不能只用一个吗?它们之间有什么区别吗?

undefined表示尚未分配值或没有定义的值。 null表示有一个值,但该值为null。所以,是的,这是有区别的。

答案 2 :(得分:4)

undefined是全局对象的变量,在浏览器环境中为window。它的初始值是原始undefined

作为全局对象的属性,从历史上看,您可以将其值更改为

window.undefined = "42"; // or just undefined = "42"

生命的意义现在已明确界定。但是由于EcmaScript-5已经出局,所以这是不允许的,即使它仍然是全局对象的属性,它现在已经变成了不可写的。

如果没有发生篡改,原语nullundefined就不一样了。

Null是具有唯一值null的数据类型。 Undefined是另一种数据类型,其唯一值是原始undefined。您可以轻松验证它们是否代表同一个对象。

null === undefined // false

然而,

null == undefined // true

是正确的,因为在进行比较之前它们都被转换为布尔值false。将这两个值转换为布尔值的规则在规范的第9.2节中明确定义。

9.2 ToBoolean

Argument Type | Result
-------------------------------------------------------------------------
Undefined     | false
Null          | false
Boolean       | The result equals the input argument (no conversion).
Number        | ..
String        | ..
Object        | ..

答案 3 :(得分:1)

在javascript中,undefined表示声明的变量,但尚未赋值。

Null是一个值,因此var = null是一个已定义的变量。

尝试阅读此What is the difference between null and undefined in JavaScript?