手记

令我猝不及防undefined 和null

Javascript有两个“空值”用来表示信息缺失,undefined和null。
undefined表示“没有值”(既不是原始值也不是对象)。访问未初始化的变量,缺失的参数,以及缺失的属性会返回这个空值。并且如果函数中没有任何显式的返回值时,则会隐式的返回undefined。
Null 的意思是“没有对象”。在用到对象的时候它表示空值(比如参数,对象链中的最后一个元素等)。
undefined和null是仅有的在访问任何属性抛出异常时都会得到的值。

function returnFoo(x) { return x.foo}
returnFOO(true)
undefined
returnFOO(0)
undefine

returnFOO(null)
TypeError:Cannot read property ‘foo’of null
returnFoo(undefined)
TypeError: Cannot read property ‘foo’ of null

undefined更多的时候是表示不存在的元数据。相反的,null表示的是空值。例如:访问一个JSON节点时返回值得意义如下。
undefined表示删除一个对象属性或数组元素。
null表示将属性或者元素设置为空。
**

Undefined和null出现的场景

**

undefine出现的场景

(1) 未初始化的变量是undefined:

var foo;
foo
undefined

(2) 缺失的参数是undefined:

function f(x){ return x}
f()
undefined

(3) 如果访问一个不存在的属性,会返回undefined:

var obj={}
obj.foo
undefined

(4) 如果函数中没有显式的返回任何值,函数会隐式返回undefined:

function f(){}
f()
undefined

function g() {return ;}
g()
undefined

Null出现的场景

(1) Null是原型链最顶端的元素:

object.getPrototypeOf(Object.prototype)
Null
(2) 当字符串没有匹配到正则表达式的结果时,RegExp.prototype.exec()会返回null:
/a/.exec(‘xxxx’)
Null

检测undefined和null

(1) 通过严格相等检测undefined和null
if(x === null)… if(x === undefined)…
if(x !== undefined && x !== null){

}
同时检测undefined和null还可以用判断他们是否为真值
if(x){

}
除了undefined和null被认为false之外,0 和NaN也被认为false

(1) 通过使用typeof运算符检测undefined,但是最好使用上面的方法。

Undefined的修改

因为undefined是全局对象的一个属性。在ECMAScript3中,看到undefined时需要特别注意,因为很轻易的就会改变它的值。在ECMAScript5中就没有必要,因为undefined是只读的。
用来防止改变undefined的方法:
(1) 技巧一
隐藏全局undefined(因为它可能是错误的值)。
(function(undefined){
If(x === undefined)…
}());
上面的代码中undefined保证会是正确的值,因为它的值不是由函数调用时所提供的。
(2)技巧二
和void 0 进行比较 ‘void 0 ’总是undefined
if(x === void 0)


ps:今天晚上看书时看到的,希望对大家有帮助


1人推荐
随时随地看视频
慕课网APP