js等于操作符和全等操作符(== 和 ===)的区别,在什么情况下使用

在JavaScript中,==(等于操作符)和===(全等操作符)都是用来比较两个值是否相等的工具,但它们有一些重要的区别。

  • ==会尝试进行类型转换,然后再比较。这意味着它可能会将不同类型的值转换为相同类型,然后再判断相等性。
  • ===是严格相等,不会进行类型转换。它要求不仅值相等,而且类型也必须相同。

等于操作符

等于操作符用两个等于号 (==)表示,如果操作数相等,则返回 true

JavaScript 中存在隐式转换。等于操作符 ( == )在比较中会先进行类型转换,在确定操作是否相等。

如果一个操作数是布尔值,则将其转换为数值,再比较是否相等

let compare1 = (true == 1) // true

如果一个操作数是字符串,另一个是数值,则尝试将字符串转换为数值,再比较是否相等

let compare1 = ("66" == 66) // true

如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf 方法取得其原始值,在根据前面的规则进行比较

let obj = {valueOf:function(){return 1}}
let compare1 = (obj == 1) // true

nullundefined 相等

let compare1 = (null == undefined ) // true

如果有一个操作数是 NaN ,则相等操作符返回 false

let compare1 = (NaN == NaN ) // false

如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true

let obj1 = {name:"xxx"}
let obj2 = {name:"xxx"}
let compare1 = (obj1 == obj2 ) // false

请添加图片描述

  • 两个都为简单类型,字符串和布尔值都会转换成数值,再比较
  • 简单类型与引用类型比较,对象转化成其原始类型的值,再比较
  • 两个都为引用类型,则比较它们是否指向同一个对象
  • nullundefined 相等
  • 存在 NaN ,则返回 false

全等操作符

全等操作符用三等于号 (===)表示,只有两个操作数在不转换的前提下相等才返回 true (即类型相同,值也需要相等)。

let compare1 = ("66" === 66) // false
let compare2 = (66 === 66) // true

undefinednull 与自身比较

let compare1 = (null === null)  //true
let compare2 = (undefined === undefined)  //true

请添加图片描述

区别

在JavaScript中,==(等于操作符)和===(全等操作符)都是用于比较两个值是否相等的工具,但它们有一些关键的区别。

类型比较

  • ==执行弱类型比较,它会在比较之前尝试进行类型转换。这意味着如果你比较不同类型的值,JavaScript会尝试将它们转换为相同类型,然后再比较。
  • ===执行严格类型比较,它不会进行类型转换。如果比较的两个值类型不同,直接返回false

使用场景

  • 推荐在可能的情况下使用===,因为它不会引起意外的类型转换,能更精确地比较值。
  • 有些情况下,==可能会进行一些奇怪的类型转换,导致不直观的比较结果,因此最好在不确定类型的情况下避免使用。

举例说明

  • 使用===:比如在判断变量是否为nullundefined时,因为这两者的值相等但类型不同,使用===可以确保严格的比较。
if (value === null || value === undefined) {// 处理 null 或 undefined 的情况
}
  • 使用==:在你确实需要进行类型转换的情况下,例如比较字符串和数字。
if (stringValue == 10) {// 当 stringValue 可以转换为数字 10 时,这个条件为真
}

相等操作符会做类型转换,再进行比较,全等运算符不会做类型转换

let compare1 = ("66" === 66) // false
let compare2 = (66 === 66) // true

undefinednull 与比较,相等为 true ,全等为 false

let compare1 = (undefined == null)  //true
let compare2 = (undefined === null)  //false

请添加图片描述

总结

相等运算符隐藏的类型转换,会带来一些违反直觉的结果

'' == '0' // false
0 == '' // true
0 == '0' // truefalse == 'false' // false
false == '0' // truefalse == undefined // false
false == null // false
null == undefined // true' \t\r\n' == 0 // true

请添加图片描述

在比较 null 的情况的事情,我们一般使用相等操作符 ==

const obj = {};
if(obj.x == null){console.log("1")  //执行}

等同于下面的写法

if(obj.x === null || obj.x === undefined) {
...
}

总的来说,为了避免意外的类型转换,推荐在大多数情况下使用===进行严格的值和类型比较。因为它比较严格,不会引起意外的类型转换,更确保你得到的是你期望的比较结果。只有在你明确知道可能涉及类型转换的情况下,才使用==

持续学习总结记录中,回顾一下上面的内容:
在JavaScript中,==(等于操作符)和===(全等操作符)都是用来比较两个值是否相等的工具,但它们有一些重要的区别。

  • ==会尝试进行类型转换,然后再比较。这意味着它可能会将不同类型的值转换为相同类型,然后再判断相等性。
  • ===是严格相等,不会进行类型转换。它要求不仅值相等,而且类型也必须相同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/626229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教3妹学编程-算法题】3008. 找出数组中的美丽下标 II

3妹:呜呜,烦死了, 脸上长了一个痘 2哥 : 不要在意这些细节嘛,不用管它,过两天自然不就好了。 3妹:切,你不懂,影响这两天的心情哇。 2哥 : 我看你是不急着找工作了啊, 工作…

爬虫-8-数据存储-mysql

#mysql占空间最小吧,数据存储没问题吧 (//∇//)

【.net core】yisha框架,bootstrap-table组件增加固定列功能

需要引入 bootstrap-table-fixed-columns.css和bootstrap-table-fixed-columns.js文件 文件代码: bootstrap-table-fixed-columns.css样式文件代码 .fixed-table-header-columns, .fixed-table-body-columns {position: absolute;background-color: #fff;displa…

C++系统笔记教程----vscode远程连接ssh

C系统笔记教程 文章目录 C系统笔记教程前言开发环境配置总结 前言 开发环境配置 Ubuntu20.24VScode 如果没有linux系统,但是想用其编译,可以使用ssh远程连接。 首先进入vscode,打开远程连接窗口(蓝色的小箭头这) 选择连接到主机…

FFmpeg之AVFormat

文章目录 一、概述二、解封装流程三、重要结构体3.1、AVFormatContext3.2、AVInputFormat3.3、AVOutputFormat3.4、AVStream 四、重要函数分析4.1、avformat_alloc_context4.2、avformat_open_input4.2.1、init_input4.2.2、av_probe_input_format2 4.3、avformat_find_stream_…

Linux环境搭建FastDFS文件服务器(附带Nginx安装)

本文主要介绍在linux服务器如何搭建FastDFS文件服务器。大概分为9个步骤,由于内容较为繁琐。下面带你入坑! 首先简单介绍一下FastDFS是淘宝资深架构师余庆老师主导开源的一个分布式文件系统,用C语言编写。适应与中小企业,对文件不…

设计 Pastebin.com

设计 Pastebin.com 设计 Bit.ly 是一个类似的问题,区别是 pastebin 需要存储的是 paste 的内容,而不是原始的未短化的 url. 怎么处理这个问题? 第一步:概述用例和约束 收集这个问题的需求和范畴。问相关问题来明确用例和约束&…

Github 2024-01-16 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10HTML项目1 精心策划的Python资源列表 创建周期:3490 天开发语言:Python…

蓝桥杯备赛 | 洛谷做题打卡day3

蓝桥杯备赛 | 洛谷做题打卡day3 sort函数真的很厉害! 文章目录 蓝桥杯备赛 | 洛谷做题打卡day3sort函数真的很厉害!【深基9.例1】选举学生会题目描述输入格式输出格式样例 #1样例输入 #1 样例输出 #1 我的一些话 【深基9.例1】选举学生会 题目描述 学校…

23111 网络编程 day2

思维导图 重打代码 #include<myhead.h> #define SER_IP "192.168.122.150" //服务器ip #define SER_PORT 8888 //服务器端口int main(int argc, const char *argv[]) {//1.创建用于连接的套接字int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd-1){perror("…

Python - 深夜数据结构与算法之 位运算

目录 一.引言 二.位运算简介 1.二进制与十进制 2.左/右移 3.位运算 4.异或 XOR 5.指定位置的位运算 6.实战要点 三.经典算法实战 1.Number-1-of-bits [191] 2.Power-Of-Two [231] 3.Reverse-2-Bits [190] 4.N-Queens [51] 四.总结 一.引言 通常情况下我们计数采…

Flink-SQL——时态表(Temporal Table)

时态表(Temporal Table) 文章目录 时态表(Temporal Table)数据库时态表的实现逻辑时态表的实现原理时态表的查询实现时态表的意义 Flink中的时态表设计初衷产品价格的例子——时态表汇率的例子——普通表 声明版本表声明版本视图声明普通表 一个完整的例子测试数据代码实现测试…

使用Github + PicGo搭建个人图床,并使用CDN加速

文章目录 前言创建仓库配置PicGo如何使用 前言 在写博客的时候&#xff0c;常常需要为博客配图&#xff0c;于是一个好用稳定的图床的重要性不言而喻。本文主要介绍如何使用GitHub PicGo的方式快速搭建一个个人使用的图床。该方式方便快捷&#xff0c;还免费hh&#xff0c;唯…

python 集合的详细用法

当前版本&#xff1a; Python 3.8.4 简介 Python中的集合是一种无序、可哈希的且不重复的数据类型&#xff0c;用于存储唯一的元素。集合的实现基于哈希表&#xff0c;因此在插入、查找和删除元素时具有高效性能。集合的每个元素都必须是不可变的&#xff0c;可以是数字、字符…

瑞_Java开发手册_(二)异常日志

文章目录 异常日志的意义(一) 错误码(二) 异常处理(三) 日志规约附&#xff1a;错误码列表 &#x1f64a;前言&#xff1a;本文章为瑞_系列专栏之《Java开发手册》的异常日志篇&#xff0c;本篇章主要介绍异常日志的错误码、异常处理、日志规约。由于博主是从阿里的《Java开发手…

基于Redis+Lua的分布式限流

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 前面我们了解了如何利用Nginx做网关层限流&#xf…

Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件

Microsoft Remote Desktop 是一款专为 Mac 用户设计的远程桌面工具&#xff0c;它可以帮助用户通过网络连接到其他计算机&#xff0c;实现远程控制和操作。 软件下载&#xff1a;Microsoft Remote Desktop for Mac 中文正式版下载 该工具支持多种远程连接协议&#xff0c;包括 …

【数学建模美赛M奖速成系列】数据可视化方法(一)

数据可视化方法 写在前面山脊图优点缺点实现matlabpython 气泡矩阵图实现matlabpython 后续 写在前面 最近开始更新一个新的系列科研绘图&#xff0c;在同一个竞赛下&#xff0c;大家都近乎相同的解题思路下。之所以能出现一等二等三等奖的区别很大部分都在于结果的可视化&…

Docker 容器之间的互相通信

Docker容器之间的互相通信 步骤一&#xff1a;创建自定义网络 首先&#xff0c;我们需要创建一个自定义网络&#xff0c;以便容器可以连接到这个网络上&#xff0c;从而实现互相通信。在命令行中执行以下命令&#xff1a; # 创建 docker network create ddz # 查看 docker n…

利用Socket动手实现简单HTTP协议

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…