关于null和undefined的区别
在JavaScript基本类型中null和undefined是两个比较特殊的类型,关于null和undefined的区别在于哪里?这个问题相信很多朋友在面试过程中,面试官经常问到的经典问题,那么我们今天就来详细拓展说说两者之间的区别。
二话不说先上代码:
// 情况1
console.log(null==undefined)//true
// 情况2
console.log(null===undefined)//false
首先说说这第一种情况,用的是等值符==
进行值的比较,这个等值符会先将两边值的类型进行比较,如果类型相同,则会直接比较值,若不相同,则先转换成相同的类型再进行比较。
类型转换规则:
- 如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字number进行比较。
- 如果等号两边出现了null或undefined,null和undefined除了和自己相等,就彼此相等。
- 注意:NaN==NaN // 返回false,NaN和所有值包括自己都不相等。
第二种情况是用等同符===
进行比较,当两边的类型相同时,直接比较值,若类型不相同直接就返回false,相当于绝对相等,也就是类型和值两者都相等的情况下才会返回true。
这两种情况的原因在于:
- null:
Null
类型,代表的是“空值”,代表一个空对象指针,使用typeof
类型检测运算得到object
,所以我们可以认为它是一个比较特殊的值。 - undefined:
Undefined
类型,当一个声明了但是为初始化赋值的时候,这个变量得到的就是undefined
《JavaScript高级程序设计》中的定义是这样的:
Undefined类型:Undefined类型只有一个值,即特殊的undefined。在使用var 声明变量但未对其加以初始化时,这个变量的值就是undefined。
Null类型:Null类型也只有一个特殊的值——null。从逻辑角度来看,null值表示一个空对象指针。
接下来让我们一起看看以下几种示例
// -----typeof-----
var a
typeof a
// undefined
var b = null
typeof b
// object
// -----instanceof-----
var a
a instanceof Object
// false
var b = null
b instanceof Object
// false
根据以上对比,typeof b
是object
,b instanceof Object
却是false?
注解:
instanceof
运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype
属性。(f用于判断一个变量是否是某个对象(类)的实例)
这是因为null
表示为空的引用,虽然null
的类型是object,但是null不具有任何对象的特性。
var a = new Number(1)
a instanceof Number
// true
var b = 1
b instanceof Number
// false
在这里第二段代码中b不是赋值了吗?怎么会返回false?我们上面解释了instanceof
的定义,那么可以直接表明这里b根本就是一个常数,跟对象的实例并不挨边。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?