当前位置: 首页 > news >正文

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

概要

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

一、=== 严格相等

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

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

二、== 宽松相等

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

在此之前,要介绍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),两端都是原始,转成数字比较完成。a = {};
b = {};
a == b
// false
//先看(1),类型相同,比较值。对象的值就是地址,地址不一样所以false。

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


http://www.mrgr.cn/news/20526.html

相关文章:

  • 加密与安全_ sm-crypto 国密算法sm2、sm3和sm4的Java库
  • Java【数组】
  • 国际标准图像分辨率测试ISO12233 - 2017中文翻译
  • 分享7款实现社会实践报告AI生成论文网站
  • boost和buck-boost拓扑原理
  • TinyWebSever源码逐行注释()_简单代码的整合
  • Illustrator怎么用:从入门到精通的全面指南
  • Java学习Day39:小西天恭迎天命人!(spring框架)
  • 2024年多媒体应用设计师考试的知识大纲
  • HarmonyOS开发实战( Beta5.0)DevEco Device Tool开发环境搭建实践
  • Spark的一些高级用法
  • vue part 8
  • 链表leetcode-1
  • 报表生成---JFreeChart
  • TensorFlow-keras介绍(一)
  • 从零到精通:用C++ STL string优化代码
  • Leetcode刷题笔记:全排列
  • 结构型设计模式—外观模式
  • 如何考取CDGA数据治理工程师证书,提升职场竞争力?
  • AAC高级音频编码技术