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

2024-09-06 01:04
文章标签 记录 js 运算符

本文主要是介绍[记录]-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方法,若该方法得到原始值则返回,反之则则抛出异常。

这篇关于[记录]-js中的==运算符和===运算符。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140562

相关文章

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

Python海象运算符:=的具体实现

《Python海象运算符:=的具体实现》海象运算符又称​​赋值表达式,Python3.8后可用,其核心设计是在表达式内部完成变量赋值并返回该值,从而简化代码逻辑,下面就来详细的介绍一下如何使用,感兴趣... 目录简介​​条件判断优化循环控制简化​推导式高效计算​正则匹配与数据提取​性能对比简介海象运算符

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned