通俗易懂理解undefined和null的区别

对本人而言,undefined和null这两个特殊值可谓纠结了我好长一段前端路程,大体意思能明白,但却很少去深究实质区别,最近又特地学习了一番前来分享。

六大基本类型(es6版)中,Undefined和Null占其中两位。大体上看,undefined和null都代表空值,实质却有所区别:
undefined: 表示该变量未定义或未赋值,是一种代表变量初始化的状态值。例如已经定义了a变量,但没有赋值,获取a变量将返回undefined;又例,当某函数已定义并要求传入形参,但调用函数时未传入实参,则函数形参将返回undefined。

var a;
console.log(a);  //undefined

function func(x) {
	return x;
}
func() //未传实参,形参为undefined

null: 表示空值,它本身就是一个空对象指针,如果说undefined是变量先天的状态值,那么null大可理解成变量对象后天被人为地赋予null这个空值。

var a = null;
console.log(a);  //null

似乎好理解一点了,我们往下。当用typeof获取变量类型时就可以发现,Undefined类型变量将返回Undefined,而Null类型却会返回Object!进一步证明前话,null是一个空对象指针,它本身就是一个代表空的对象值,我们可以说null值就是用来形容一个空对象变量。 对待Undefined和Null的区别问题上,你完全可以跟hr举例:Undefined就是一个纸用完了的卷纸筒,光秃秃没东西;Null就是连筒都没了,空。

问:那什么时候赋null值合适?
一、当这个变量将来会用来保存对象的话,最好是先为这个变量初始化null值。java精神:万物皆对象。换句话,我们应该明确地为对象变量空值的情况下初始为null,以方便区分undefined和null;
二、当这个变量准备弃用时,应该为变量赋null值,这在js中叫作解除引用。解除引用能让变量脱离执行环境,进一步回收内存。这在实战中能够防止变量循环引用,重复混乱地赋值。

最后作一个简单的undefined和null的对比:
undefined表示变量未定义或未赋值的初始状态值,是一个机器式标识;
null表示一个空对象变量,本身是空对象指针,是一个程序式标识。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值