[记录]-js中的==运算符和===运算符。

概要

在JavaScript中,==和===运算符一直是一个令人头疼的问题。==用来判断等式两边的值是否宽松相等。===用来判断等式两边的值是否严格相等
本文对这两种运算符的判断规则做出了详细解析与总结。

一、=== 严格相等

严格相等的运算规则很简单。=== 运算符在比较时不进行类型转换。只有在两个值的类型内容都完全相同时,它才会返回 true。
例如:

5 === '5'; // false,因为类型不同
null === undefined; // false,因为它们的类型不同
0 === false; // false,因为类型不同
5 === 6; //false,类型相同,值不同
5 === 5; //true,类型相同,值相同

在进行===判断时,有两种特殊情况需要注意:
1、等式两边中有任意一端存在NaN,返回false。
2、判断-0 === +0时,返回false。

二、== 宽松相等

宽松相等的运算规则就复杂不少了,== 运算符会进行类型转换。

在此之前,要介绍js中的八种数据类型:
原始类型-String、Number、Boolean、Null、Undefined、Symbol、BigInt
对象类型-Object(Object是个大类,function函数、array数组、date日期…等都归属于Object)

在进行 == 比较时,根据等式两边的类型情况,运算规则如下(比较顺序从上往下依次判断):
(1)两端类型相同,比较值。
(2)两端中有任意一端存在NaN,返回false。
(3)undefined和null只有与自身比较,或者相互比较时,才返回true。其他情况里等式两端出现了undefined和null则返回false。
(4)两端都是原始类型,全部转换成数字比较。
(5)有一端是原始类型,有一端是对象类型。把对象转换成原始类型后,重回(1)向下比较。

例如:

5 == '5'; 
// true 
//先看(1),类型不同;看(2),没有NaN;看(3),不涉及undefined和null;看(4),两端都是原始,转成数字比较完成。

null == undefined; 
// true
//先看(1),类型不同;看(2),没有NaN;看(3),比较完成。

0 == false;
// true
//先看(1),类型不同;看(2),没有NaN;看(3),不涉及undefined和null;看(4),两端都是原始,转成数字比较完成。

const a = {};
const b = {};
a == b
// false
//先看(1),类型相同,比较值。对象的值就是地址,地址不一样所以false。

对于第(5)步,对象是怎么转换成原始类型的呢?
规则如下(从上到下依次比较):
1、如果对象拥有[Symbol.toPrimitive]方法,调用该方法,没有该方法则进入下一步。调用该方法时,若该方法得到原始值则返回,反之则抛出异常。
2、调用对象的valueOf方法。若该方法得到原始值则返回,反之则进入下一步。
3、调用对象的toString方法,若该方法得到原始值则返回,反之则则抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值