在Javascript中,我读过我们可以为undefined
定义自己的值。最初undefined == null
是true
。
undefined
的值undefined == null
后仍为true
? undefined
是否意味着我们可以为其分配实数?null
和undefined
一样没有价值的东西?难道我们不能只用一个吗?它们之间有什么区别吗?答案 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已经出局,所以这是不允许的,即使它仍然是全局对象的属性,它现在已经变成了不可写的。
如果没有发生篡改,原语null
和undefined
就不一样了。
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?