null 和 undefined 的区别

1. 前言

null 和 undefined 的区别 ?这是一道基础面试题

很多人都会说 null 是空,undefined 是未定义,这样回答太过于笼统。

面试官反问:null 是空代表没有值是吧,undefined 是未定义也是没有值是吧,都是没有值,它们的区别到底是什么 ?

应聘者:这下芭比Q了 !

2. 历史原因

JavaScript 语言居然有两个表示 “无” 的值:null、undefined,这是为什么 ?

1995 年 JS 诞生时,最初像 Java 一样,只设置了 null 作为表示 “无”,根据 C 语言的传统,null 被设计成可以自动转为 0

但是,JS 的设计者,觉得这样做还不够,主要有下面两个原因

一、JS 中的 null 像 Java 中的 null 一样,被当作一个对象。但是 JS 中的数据类型分为 原始类型 和 合成类型(复合类型),作者觉得表示 “无” 的值最好不是对象,也可以理解为不应该是对象

 
  1. // 返回值是 object
  2. typeof null

二、JS 的最初版本没有错误处理机制,发生数据类型不匹配时,会自动进行类型转换,作者觉得,如果 null 自动转为 0,很不容易发现错误

 
  1. // 2
  2. null + 2
  3. // NaN
  4. undefined + 2

因此,作者又设计了一个 undefined。先有 null 后有 undefined,出来 undefined 是为填充之前的坑

3. 具体区别

a. 自动转换

JS 最初版本是这样区分的:

null 表示一个 “无” 的对象(空对象指针),转为数值时是 0,undefined 表示一个 “无” 的原始值,转为数值时是 NaN

b. 含义不同

null 的含义是空对象。一般用于赋值给那些可能返回对象的变量作为初始化值。typeof null 的返回值是 object

undefined 的含义是未定义。变量声明了但没有赋值,变量的值是 undefined。typeof undefined 的返回值是 undefined

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超酷的站长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值