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

相关文章

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重