你不知道的undefined:
undefined 即是一个原始数据类型,也是一个原始值。
undefined 是全局对象上的一个属性
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
})
// 结果报错系统会给未赋值的变量自动赋值为: undefined
var a;
console.log( a );
// undefined函数没有返回值的时候,系统会自动给函数返回: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的关键字。由于在局部作用域中,undefined可以作为变量名重新赋值,所以我们在局部作用域中使用 undefined这个值时,最好用 void(0) 或者 window.undefined 代替。 void(0) 是直接返回一个undefined值,效率还要优先于 window.undefined 的查找。