关于null和undefined的区别

在JavaScript基本类型中null和undefined是两个比较特殊的类型,关于null和undefined的区别在于哪里?这个问题相信很多朋友在面试过程中,面试官经常问到的经典问题,那么我们今天就来详细拓展说说两者之间的区别。

二话不说先上代码:

// 情况1
console.log(null==undefined)//true
// 情况2
console.log(null===undefined)//false

首先说说这第一种情况,用的是等值符==进行值的比较,这个等值符会先将两边值的类型进行比较,如果类型相同,则会直接比较值,若不相同,则先转换成相同的类型再进行比较。

类型转换规则:

  1. 如果等号两边是boolean、string、number三者中任意两者进行比较时,优先转换为数字number进行比较。
  2. 如果等号两边出现了null或undefined,null和undefined除了和自己相等,就彼此相等。
  3. 注意: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 bobjectb 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根本就是一个常数,跟对象的实例并不挨边。

posted @   AvenCheung  阅读(197)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示