undefined和null的区别

我们知道,当你直接打印一个未在全局环境下声明的变量时候,控制台会报引用错误,而你使用var关键字声明时候,再去打印,值是undefined,这是为什么呢?

console.log(a);//Uncaught ReferenceError: a is not defined
 var a;
 console.log(a);//undefined

我们都知道JavaScript内部存在预编译过程,对于未被赋值的变量会先附上undefined,如果后面有实际值再进行替换,所以第一行代码变量a虽然未被声明,其实a是有值的,我们使用typeof检查一下数据类型

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

打印undefined,也不是String、Number、Null、Function和Object,那为什么在第二行代码先使用var关键字声明之后,就可以打印呢?答案是当你console.log时,会先确认改变量是否已经被声明,如果没有被声明,那么js直接给你报错,如果你使用过关键字var声明过,但未赋值,打印默认值。
还有一个问题,相信你们也发现了,就是js内部赋默认值是undefined,而不是null,为什么呢?
因为undefined相比null来说,undefined不会占用任何空间,而null的值是一个空对象指针,虽然空对象里面啥都没有,但是还会占用系统内存的,所以默认值是undefined,也只能是undefined。

总结:undefined和null
undefined和null的值相等,但类型不同
1、undefined:是所有没有赋值变量的默认值,自动赋值;
2、null:释放一个变量的引用对象,表示一个变量不在指向任何对象地址。
共同点:都是原始数据类型,保存在栈中变量本地

console.log(null == undefined);//true
console.log(null === undefined);//false

不同点:
1、undefined:表示变量声明过,但未必赋过值,而且它是所有未赋值变量的默认值;
2、null:表示一个变量将来可能指向一个对象,通常用于主动释放指向对象的引用。

var arr = ["沐雨橙风" , "一叶知秋"];
arr = null//释放指向数组的引用

当你使用完不太需要一个对象时候,通常将它设置为null,把原先指针剪短,重新指向一个空对象引用,这样方便js进行垃圾回收。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值