你不知道的undefined:
undefined 即是一個(gè)原始數(shù)據(jù)類型,也是一個(gè)原始值。
undefined ?是全局對(duì)象上的一個(gè)屬性
window.undefined
。console.log( window.undefined );
// undefined不可寫 ? ?writable: false
window.undefined = 123;
console.log( undefined );
// undefined不可配置 ? ?configurable: false
delete window.undefined;
console.log( undefined );
// undefined不可枚舉 ? enumerable: false
for( var k in window) {
? ?if( k === undefined) {
? ? ? ?cosole.log( k );
? ?}
}
// 沒有輸出不可重新定義:
Object.definProperty(window, 'undefined', {
? ?writable: true,
? ?enumberable: true,
? ?configurable: true
})
// 結(jié)果報(bào)錯(cuò)系統(tǒng)會(huì)給未賦值的變量自動(dòng)賦值為: undefined
var a;
console.log( a );
// undefined函數(shù)沒有返回值的時(shí)候,系統(tǒng)會(huì)自動(dòng)給函數(shù)返回:undefined
function a () {
? ?console.warn('123')
}
console.log( a() );
// undefined在全局作用域下: window.undefined 不可寫,但是局部作用域下可以重新賦值。
var undefined = 1;
console.log( undefined );
// undefined
function test() {
? ?var undefined = 1;
? ?console.log( undefined )
}
test();
// 1
// 原因在于,undefined并不是js的關(guān)鍵字。由于在局部作用域中,undefined可以作為變量名重新賦值,所以我們在局部作用域中使用 undefined這個(gè)值時(shí),最好用 void(0) 或者 window.undefined 代替。 ?void(0) 是直接返回一個(gè)undefined值,效率還要優(yōu)先于 window.undefined 的查找。