Javascript中null和undefined的区别

前言

关于nullundefined的区别网上有很多不同的解释,为了方便自己也方便读者所以我做了一些简单整理

区别

开门见山,直接上主菜:

  • nullundefined是javascript的两种不同的基本类型, 可以通过typeof去判断:
    typeof null    		// "object"   我去,null为啥类型是object?(别急,接下来我会解释)
    typeof undefined    // "undefined"
    
    也可以通过===来判断, 毕竟===既判断值又判断类型嘛
    null === undefined  // false
    null == undefined   // true
    
  • nullundefined转换为number类型时的值不同
    Number(null)   		// 0
    Number(undefined)   // NaN
    

其实在js开发中,这俩基本一样,都可以用来清空变量。要是硬说意义上的区别的话,null表示这个变量为空,不应该存在。而undefined表示该变量应该存在但还没有定义。

null在类型判断时为什么是object

这是一段历史,1995年Javascript诞生之初, 在实现js类型判断的方法时(也就是typeof),数值是以32位存储的,由标志位(1~3位)和数值组成。标志位存储的是低位的数据。这里有五种标志位:

  • 000 表示对象
  • 1 表示整数
  • 010 表示浮点数
  • 100 表示字符串
  • 110 表示布尔类型

有两个特殊值:

  • undefined-2^30表示
  • null全0表示

这不巧了吗这不是,null的低位也是000,所以误打误撞成为了object,这一点一直被认为是个bug,直到es6的时候typeof null === 'null'的提案被否决,typeof null === 'object'变成了feature,也就是说这个"bug"不会被“修复”了

关于这段历史可以查看原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值