什么时候在JavaScript中使用null或undefined?

时间:2011-06-21 17:10:44

标签: javascript null undefined

我对JavaScript何时返回nullundefined感到困惑。不同的浏览器似乎也以不同的方式返回。

您能否举例说明null / undefined与返回它们的浏览器。

虽然我现在对undefined方面有所了解,但我仍未完全明确null。它是否与空值相似?

E.g。您有一个没有任何值设置的文本框。现在,当您尝试访问其值时,它是null还是undefined并且它们是否相似?

6 个答案:

答案 0 :(得分:121)

我发现其中一些答案含糊不清,我发现找出这些东西的最佳方法就是打开控制台并亲自测试。

var x;

x == null            // true
x == undefined       // true
x === null           // false
x === undefined      // true

var y = null;

y == null            // true
y == undefined       // true
y === null           // true
y === undefined      // false

typeof x             // 'undefined'
typeof y             // 'object'

var z = {abc: null};

z.abc == null        // true
z.abc == undefined   // true
z.abc === null       // true
z.abc === undefined  // false

z.xyz == null        // true
z.xyz == undefined   // true
z.xyz === null       // false
z.xyz === undefined  // true

null = 1;            // throws error: invalid left hand assignment
undefined = 1;       // works fine: this can cause some problems

所以这绝对是JavaScript中微妙的细微差别之一。如您所见,您可以覆盖undefined的值,使其与null相比有些不可靠。使用==运算符,就我所知,您可以互换地可靠地使用nullundefined。但是,由于null无法重新定义的优势,我可能会在使用==时使用它。

例如,如果variable != null等于variablenullundefined将始终返回false,而如果variable != undefined variable将返回false }}等于nullundefined UNLESS undefined会事先重新分配。

如果您需要确保某个值实际为===(而非{{},则可以可靠地使用undefined运算符来区分nullundefined 1}})。

根据ECMAScript 5规范:

  • null Null 都是六种内置类型中的两种。

4.3.9未定义值

  

当变量尚未赋值时使用的原始值

4.3.11空值

  

表示故意缺少任何对象值的原始值

答案 1 :(得分:80)

当调用没有时,DOM方法getElementById()nextSibling()childNodes[n]parentNode()等返回null(已定义但没有值)返回一个节点对象。

属性已定义,但它引用的对象不存在。

这是您想要测试相等性的少数几次之一 -

if(x!==undefined)对于空值

将为true

if(x!= undefined)对于不属于undefinednull的值均为真(仅限)。

答案 2 :(得分:50)

您未定义各种方案:

您使用var声明变量但从未设置它。

var foo; 
alert(foo); //undefined.

您尝试访问您从未设置过的对象的属性。

var foo = {};
alert(foo.bar); //undefined

您尝试访问从未提供的参数。

function myFunction (foo) {
  alert(foo); //undefined.
}

正如cwolves在对另一个答案的评论中所指出的那样,那些没有返回值的函数。

function myFunction () {
}
alert(myFunction());//undefined

通常必须在变量或属性上有意设置null(请参阅注释,以便在未设置的情况下显示)。另外,null的类型为object,未定义的类型为undefined

我还应该注意,null在JSON中有效,但未定义不是:

JSON.parse(undefined); //syntax error
JSON.parse(null); //null

答案 3 :(得分:9)

我可能会遗漏一些东西,但是afaik,你只得到undefined

更新:好的,我错过了很多,试图完成:

你得到undefined ...

...当您尝试访问不存在的对象的属性时:

var a = {}
a.foo // undefined

...当你声明了一个变量但没有初始化它时:

var a;
// a is undefined

...当您访问未传递任何值的参数时:

function foo (a, b) {
    // something
}

foo(42); // b inside foo is undefined

...当函数没有返回值时:

function foo() {};
var a = foo(); // a is undefined

某些内置函数可能会因某些错误而返回null,但如果是这样,则会记录下来。 null是JavaScript中的具体值,undefined不是。


通常你不需要区分它们。根据变量的可能值,使用if(variable)来测试值是否设置(nullundefined评估为false)就足够了

  

另外,不同的浏览器似乎也以不同的方式返回。

请举一个具体的例子。

答案 4 :(得分:3)

关于这个主题,规范(ecma-262)非常清楚

我发现它非常有用且简单,所以我分享它: - 在这里你会发现Equality algorithm - 在这里你会找到Strict equality algorithm

我从mozilla开发者网站上看到了“抽象的平等,严格的平等和相同的价值”,节目相同。

我希望你觉得它很有用。

答案 5 :(得分:0)

未定义属性时没有定义。 null是一个对象。它的类型为null。 undefined不是对象,其类型未定义。

这是一篇很好的文章,解释了差异并给出了一些例子。

null vs undefined