JavaScript中==和===的区别

🧑‍💻 写在开头
点赞 + 收藏 === 学会🤣🤣🤣

前言

JavaScript 中的相等运算符无疑是新手开发者最容易混淆的知识点之一。
==和===这两个运算符的细微差别往往会在代码中造成一些令人困惑的行为
在本文中,我们将深入探讨这两个相等运算符的工作原理,比较它们的特点和局限性
让我们开始吧!

区别

类型转换:

  1. == 运算符在比较时会进行隐式类型转换,将操作数转换为相同的类型后再进行比较。
  2. === 运算符不会进行隐式类型转换,它会先检查操作数的类型,如果类型不同就直接返回 false。

比较结果:

  1. == 运算符在进行比较时,会尽量将操作数转换为相同的类型,然后再比较值。
  2. === 运算符严格比较,不仅要求值相同,还要求类型相同。

== 示例

在进行==操作有以下的规则:

  1. 如果两个操作数的类型相同,则直接比较它们的值。
  2. 如果操作数中有布尔值,则先将布尔值转换为数字,再进行比较。
  3. 如果其中一个操作数是字符串,另一个是数字,则将字符串转换为数字,再进行比较。
  4. 如果其中一个操作数是对象,另一个不是,则调用对象的 valueOf() 方法获取原始值,再进行比较。如果无法获取原始值,则调用toString() 方法获取字符串,再进行比较。

接下来对他们进行比较

Number vs Number:

console.log(5 == 5); // true
console.log(0 == -0); // true
console.log(NaN == NaN); // false

数字之间的比较会直接比较它们的值。需要注意的是,NaN 与任何值(包括自己)都不相等。

String vs String:

console.log("hello" == "hello"); // true
console.log("42" == "42"); // true
console.log("" == ""); // true

字符串之间的比较会逐个字符进行比较。

Boolean vs Boolean:

console.log(true == true); // true
console.log(false == false); // true

布尔值之间的比较会直接比较它们的值。

Null vs Undefined:

console.log(null == undefined); // true
console.log(null == null); // true
console.log(undefined == undefined); // true

null 和 undefined 在比较时被视为相等。

Number vs String:

console.log(5 == "5"); // true
console.log(0 == ""); // true
console.log(0 == "0"); // true
console.log(42 == "hello"); // false 当无法转换为数字转换为0

当一个操作数是数字,另一个是字符串时,字符串会被转换为数字进行比较。

Boolean vs Number:

console.log(true == 1); // true
console.log(false == 0); // true
console.log(true == 2); // false

布尔值在比较时会先转换为数字,true 转换为 1,false 转换为 0。

Object vs Primitive:

console.log([10] == 10); // true
console.log({} == "[object Object]"); // true

当一个操作数是对象,另一个是原始值时,对象会先调用 ToPrimitive 抽象操作进行转换。

=== 示例

如果类型不同,=== 直接返回false

Number vs Number:

console.log(5 === 5); // true
console.log(0 === -0); // true
console.log(NaN === NaN); // false

数字之间的严格比较会直接比较它们的值。需要注意的是,NaN 与任何值(包括自己)都不相等。

String vs String:

console.log("hello" === "hello"); // true
console.log("42" === "42"); // true
console.log("" === ""); // true

字符串之间的严格比较会逐个字符进行比较。

Boolean vs Boolean:

console.log(true === true); // true
console.log(false === false); // true

布尔值之间的严格比较会直接比较它们的值。

Null vs Undefined:

console.log(null === undefined); // false
console.log(null === null); // true
console.log(undefined === undefined); // true

null 和 undefined 在严格比较时是不相等的。

Number vs String:

console.log(5 === "5"); // false
console.log(0 === ""); // false
console.log(0 === "0"); // false
console.log(42 === "hello"); // false

当一个操作数是数字,另一个是字符串时,它们不会进行任何类型转换,直接返回 false。

Boolean vs Number:

console.log(true === 1); // false
console.log(false === 0); // false
console.log(true === 2); // false

布尔值和数字在严格比较时也不会进行任何类型转换,直接返回 false。

Object vs Primitive:

console.log([10] === 10); // false
console.log({} === "[object Object]"); // false

当一个操作数是对象,另一个是原始值时,它们的类型不同,所以直接返回 false。

总结

本文讲解了==和===的数据对比之间的区别,通过代码示例深入分析

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Google Chrome 浏览器在链接上点右键的快捷键

如今,越来越多的软件都懒得设个快捷键,就算设置了连个下划线也懒得加了。 谷歌浏览器右键 > 链接另存为... 和 复制链接地址 的快捷键 (如图)

Flink架构底层原理详解:案例解析(43天)

系列文章目录 一、Flink架构(掌握) 二、Flink代码案例(掌握) 三、UDF(熟悉) 四、Flink常见面试题整理 文章目录 系列文章目录前言一、Flink架构(掌握)1、系统架构1.1 通信&#xff…

SystemUI默认去掉底部导航栏

一、背景 在Android系统中,SystemUI负责管理系统的状态栏、导航栏等用户界面元素。若要在SystemUI中默认去掉底部导航栏, 可以通过以下几种方法实现: 1. 修改布局文件 在Android的SystemUI源代码中,底部导航栏的布局文件通常…

SpringBoot+Session+redis实现分布式登录

SpringBootSessionRedis实现分布式登录功能实现 文章目录 目录 文章目录 前言 一、引库 二、修改配置文件 三、使用 四、解决乱码问题 1.引库 2.配置redis序列化 3.配置Session-Redis序列化 前言 这里简单介绍一下,如果你想多台机器部署你的项目的话,在…

重大突破!OpenAI 推出 GPT-4o mini,AI 领域再掀波澜!

北京时间 7 月 18 日晚,OpenAI 重磅推出“小模型”GPT-4o mini,其在文本智能和多模态推理方面展现出卓越性能,超越 GPT-3.5 Turbo,在 LMSYS“聊天机器人对战”排行榜上也力压 GPT-4。 GPT-4o mini 支持 128K Token 的长上下文窗口…

一起学Java(1)-新建一个Gradle管理的Java项目

一时兴起,也为了便于跟大家同步学习进展和分享样例代码,遂决定创建一个全新的Java项目,并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点(如Gradle等)。为了紧跟技术潮流和提高操作效率&a…

污染物CMAQ模型的安装

CMAQ安装教程(基于intel编译器) 简介 CMAQ(Community Multiscale Air Quality)系统是由美国国家环境保护局(EPA, Environmental Protection Agency)于1998年发布,是用于估算臭氧、颗粒物、有毒化合物和酸沉降等大气污…

第5讲:Sysmac Studio中的硬件拓扑

Sysmac Studio软件概述 一、创建项目 在打开的软件中选择新建工程 然后在工程属性中输入工程名称,作者,类型选择“标准工程”即可。 在选择设备处,类型选择“控制器”。 在版本处,可以在NJ控制器的硬件右侧标签处找到这样一个版本号。 我们今天用到的是1.40,所以在软…

DocRED数据集

DocRED数据集文件夹包含多个JSON文件,每个文件都有不同的用途。以下是这些文件的用途解释以及哪个文件是训练集: 文件解释 dev.json:包含开发集(验证集)的数据,通常用于模型调优和选择超参数。 label_map…

工业4.0与智能制造解决方案(149页PPT下载)

工业4.0,也被称为第四次工业革命,是一场将先进信息技术与制造业深度融合的全球性变革。这一概念起源于2011年德国提出的高科技战略项目,旨在通过利用物联网(IoT)、大数据、云计算、人工智能(AI)…

海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)

海康威视工业相机SDKPythonPyQt开发数据采集系统(支持软件触发、编码器触发) pythonpyqt开发海康相机数据采集系统 1 开发软件功能: 支持搜索相机:Gige相机设备和USB相机设备支持两种触发模式:软件触发和编码器触发支…

Python基础知识——(005)

文章目录 P21——20. 比较运算符 P22——21. 逻辑运算符 P23——22. 位运算和运算符的优先级 P24——23. 本章总结和章节习题 P21——20. 比较运算符 示例3-17—比较运算符的使用: P22——21. 逻辑运算符 示例3-18—逻辑运算符的使用: print(True and T…

群管机器人官网源码

一款非常好看的群管机器人html官网源码 搭建教程: 域名解析绑定 源码文件上传解压 访问域名即可 演示图片: 群管机器人官网源码下载:客户端下载 - 红客网络编程与渗透技术 原文链接: 群管机器人官网源码

Python设计模式:巧用元类创建单例模式!

✨ 内容: 今天我们来探讨一个高级且实用的Python概念——元类(Metaclasses)。元类是创建类的类,它们可以用来控制类的行为。通过本次练习,我们将学习如何使用元类来实现单例模式,确保某个类在整个程序中只…

如何使用大语言模型绘制专业图表

过去的一年里,我相信大部分人都已经看到了大语言模型(后文简称LLM)所具备的自然语言理解和文本生成的能力,还有很多人将其应用于日常工作中,比如文案写作、资料查询、代码生成……今天我要向大家介绍LLM的一种新使用方式——绘图。这里说的绘…

昇思25天学习打卡营第19天| Diffusion扩散模型

扩散模型,特别是Denoising Diffusion Probabilistic Models(DDPM),是一种从纯噪声开始,通过逐步去噪生成数据样本的技术。它在图像、音频、视频生成上都取得了不错的成果,比如OpenAI的GLIDE和DALL-E 2。 扩…

three完全开源扩展案例04-阵列模型

https://www.threelab.cn/three-cesium-examples/public/index.html#/codeMirror?navigationThree.js%E6%A1%88%E4%BE%8B[r166]&classifybasic&id%E9%98%B5%E5%88%97%E6%A8%A1%E5%9E%8B 更多案例 import * as THREE from three; import { OrbitControls } from three…

组队学习——贝叶斯分类器(二)

引言 在组队学习——贝叶斯分类器(一)中布置了一个鸢尾花分类的任务,以下是关于它的代码详解: 要求对鸢尾花数据集进行分类,如何进行数据预处理(提示:将分类数据转换成定量数据) 第2…

从PyTorch官方的一篇教程说开去(3.3 - 贪心法)

您的进步和反馈是我最大的动力,小伙伴来个三连呗!共勉。 贪心法,可能是大家在处理陌生问题时候,最容易想到的办法了吧? 还记得小时候,国足请了位洋教练发表了一句到现在还被当成段子的话:“如…

AGI 之 【Hugging Face】 的【从零训练Transformer模型】之二 [ 从零训练一个模型 ] 的简单整理

AGI 之 【Hugging Face】 的【从零训练Transformer模型】之二 [ 从零训练一个模型 ] 的简单整理 目录 AGI 之 【Hugging Face】 的【从零训练Transformer模型】之二 [ 从零训练一个模型 ] 的简单整理 一、简单介绍 二、Transformer 1、模型架构 2、应用场景 3、Hugging …