3

可能重复:
Javascript null 或未定义

null是保留字,但不是关键字。
因此它不能被覆盖。

undefined是一个可以被覆盖的内置全局变量。这就是为什么您看到 jQuery 在其 IIFE 中重新定义它的原因。只是为了确保它没有被覆盖。

什么是 ES 5 中指定的何时使用每个的技术区别。

我知道我已经看到浏览器将未创建的 localStorage 属性设置为 null 或 undefined,具体取决于浏览器。

localStorage.not_defined === null // sometimes

localStorage.not_defined === undefined // sometimes

ES 5 在这种情况下和一般情况下如何指定它们的用法?

ES5 没有提供说明:

8.1 Undefined 类型 Undefined 类型只有一个值,称为 undefined。任何没有被赋值的变量的值都是未定义的。

8.2 Null 类型 Null 类型只有一个值,称为 null。

http://www.ecma-international.org/publications/standards/Ecma-262.htm

4

2 回答 2

5

这两者的区别相当模糊,规范中没有明确说明。

常识如下:undefined是从未分配过的变量和不存在的属性。

null然而是一个变量或属性的状态,表明它没有赋值。

一些方法,如getElement...显式返回null以指示结果集为空。如果您的函数没有 return 语句,则隐式undefined返回。

一般来说,总是分配null并且从不undefined

于 2012-09-26T20:16:15.757 回答
3

null 是一个值。nothing 的值为空。

undefined 是缺少值。

这就是它应该被使用的方式。

你永远不应该将 undefined 分配给任何东西。这违背了目的。如果要使现有属性未定义,请使用 delete 关键字。

另一方面,null 是分配给变量的合法值。

jQuery 在其闭包中添加了一个未定义变量,因为测试 a === undefined 比编写 typeof a === 'undefined' 更容易。

于 2012-09-26T20:06:27.593 回答