最近一个朋友在找工作,经常在面试中被问到对undefined的理解,虽然回答上来了但是不全面,仔细想想我们自己可能有时候也会忽视这些很基础的细节问题,所以今天对undefined进行一个详细的总结
1、undefined
即是一个原始数据类型,也是一个原始值。
2、undefined
是全局对象上的一个属性 window.undefined
。
3、不可写 writable: false
window.undefined = 123;
console.log( undefined );
// undefined
4、不可配置 configurable: false
delete window.undefined;
console.log( undefined );
// undefined
5、不可枚举 enumerable: false
for( var k in window) {
if( k === undefined) {
cosole.log( k );
}
}
// 没有输出
6、不可重新定义
Object.definProperty(window, 'undefined', {
writable: true,
enumberable: true,
configurable: true
})
// 结果报错
7、系统会给未赋值的变量自动赋值为:undefined
var a;
console.log( a );
// undefined
8、函数没有返回值的时候,系统会自动给函数返回:undefined
function a () {
console.warn('123')
}
console.log( a() );
// undefined
9、全局作用域下:window.undefined
不可写,但是局部作用域下可以重新赋值。
var undefined = 1; //相当于给window.undefined赋值
console.log( undefined );
// undefined ,因window.undefined不可写,所以改不了
function test() {
var undefined = 1;
console.log( undefined )
}
test();
// 1 原因在于,undefined并不是js的关键字。
因,undefined
不是js的关键字,所以在局部作用域中,可以使用undefined
做为变量名。
- 如何判断是
undefined
判断是否为 undefined
,使用全等 ===
var a;
if(a===nudefined){
console.log(true);
}else{
console.log(false)
}
// true
为什么不使用 == ,防止判断出现错
var a=null;
if(a==nudefined){
console.log(true);
}else{
console.log(false)
}
//结果也为true
为防止这种情况,所以,最好使用全等
由于在局部作用域中,undefined
可以作为变量名重新赋值,所以我们在局部作用域中使用 undefined
这个值时,最好用 void(0)
或者 window.undefined
代替。
void(0) 是直接返回一个undefined值,效率还要优先于 window.undefined 的查找。
11、未定义变量,typeof
也会输出undefined
,不会报错
typeof
var a ;
console.log(typeof a) ; //undefined;
console.log(typeof b); //undefined
因为typeof
进行了处理. 故未定义变量也不会出错,而是返回undefined
但若单独打印 console.log(b)
是会报错.
VM402:1 Uncaught ReferenceError: b is not defined at <anonymous>:1:13
12、判断a 是否申明, 使用 in 关键字
var a;
if('a' in window){
console.log(true)
}else {
console.log(false)
}
13、void
关键字
void(0)
: 对0进行求值 返回undefined
注:void
返回的结果,都是undefined
void
的使用
赋值undefined
var a,b,c;
a= void(b=1,c=2);
console.log(a,b,c)
//undefined 1 2
阻止跳转
<a href = "javascript:void(0)" />
另注:
console.log( void(0) === window.undefined )
;
结果为true
;
示例:
function test(){
var undefined =1;
console.log(undefined); //1
console.log(void(0)); //undefined
console.log(undefined === void(0)); //false
console.log(window.undefined===void(0)); //true
}
test();
为防止有人用undefined做变量,可以使用void(0)
代替,void(1)
,void(100)
也可以,要不然就是window.undefined
void(0)
与window.undefined
相比,void(0)
效率更高些
现在,代码相对比较规范,所以void(0)
出现会比较少。但底层代码还是会有所使用
最后,还是希望大家代码规范