Javascript有两个“空值”用来表示信息缺失,undefined和null。
undefined表示“没有值”(既不是原始值也不是对象)。访问未初始化的变量,缺失的参数,以及缺失的属性会返回这个空值。并且如果函数中没有任何显式的返回值时,则会隐式的返回undefined。
Null 的意思是“没有对象”。在用到对象的时候它表示空值(比如参数,对象链中的最后一个元素等)。
undefined和null是仅有的在访问任何属性抛出异常时都会得到的值。
function returnFoo(x) { return x.foo}
returnFOO(true)
undefined
returnFOO(0)
undefinereturnFOO(null)
TypeError:Cannot read property ‘foo’of null
returnFoo(undefined)
TypeError: Cannot read property ‘foo’ of null
undefined更多的时候是表示不存在的元数据。相反的,null表示的是空值。例如:访问一个JSON节点时返回值得意义如下。
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:
Null出现的场景function f(){}
f()
undefinedfunction g() {return ;}
g()
undefined
(1) Null是原型链最顶端的元素:
检测undefined和nullobject.getPrototypeOf(Object.prototype)
Null
(2) 当字符串没有匹配到正则表达式的结果时,RegExp.prototype.exec()会返回null:
/a/.exec(‘xxxx’)
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:今天晚上看书时看到的,希望对大家有帮助