概述
我们都知道 undefined 是JavaScript中的一个基本数据类型,字面意思称其为“未定义”,然而其实它还有许多特别的地方需要我们去有所了解。
Undefined
1.Undefined既是基本数据类型,也是原始值数据
很容易理解,我们也经常数据赋值时赋值为undefined
let a=undefined;
console.log(a);//undefined
若一个数据没有进行赋值,那么这个数据的数据类型为undefined,其值数据也为undefined
let a;
console.log(a);//undefined
console.log(typeof a);//undefined
2.Undefined是window对象的一个属性
将window对象打印,我们可以看到undefined是window对象的一个属性
也可以直接输出查看
console.log(window.undefined);//undefined
3.全局下Undefined不可写、不可配置、不可枚举
不可写 writable:false
window.undefined=3;
console.log(window.undefined);//undefined
不可配置 configurable:false
delete window.undefined;
console.log(window.undefined);//undefined
不可枚举 enumerable:false
for(let i in window){
if(i===undefined){
console.log(i);//没有输出,说明不可枚举
}
}
4.Undefined在局部作用域下可作变量
Undefined在全局作用域下是window的一个属性,并且不可写,也就是不能作为变量进行赋值,但是在局部作用域下却可以作为变量存在,也就是说它并不是一个关键字
function fn(){
let undefined=3;
console.log(undefined);//3
}
fn()
void()
void总是返回的是一个undefined,无论参数如何
console.log(void(0));//undefined
console.log(void(1));//undefined
console.log(void(1)===undefined);//true
console.log(typeof void(1));//undefined
阻止标签行为
我们知道可以通过如下方式阻止a标签的跳转
<a href="javascript:;"></a>
还可以通过void实现(伪协议)
<a href="javascript:void(0)"></a>
严谨undefined
从上述我们能知道,在局部作用域中,undefined可以用来作为变量存在,这就导致了如果使用了它来作为变量,那么出现了undefined不等于undefined类型的情况
function fn(){
let undefined=3;
console.log(typeof undefined);//number
}
fn()
这样的话就会影响我们的判断了,如以下,本应该为true却返回了false,因为这其实是null与number比较
function fn(){
let undefined=3;
console.log(null==undefined);//false
}
fn()
这时我们用void能更加严谨的返回undefined
function fn(){
let undefined=3;
console.log(null==void(0));//true
}
fn()