JavaScript:深入Undefined

概述

我们都知道 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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值