[记录]-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

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6