讲师中心 微信公众号
AI工具推荐 视频效率加速

比较运算符等于号在基本类型与引用类型间差异

老伟吖_9945

老伟吖_9945

发布时间:2026-04-09 12:59:03

|

546人浏览过

|

来源于php中文网

原创

JavaScript中应优先使用===而非==,因==会触发隐式类型转换导致意外结果,而===严格比较类型和值,行为可预测;引用类型相等需用专门方法判断。

比较运算符等于号在基本类型与引用类型间差异

在 JavaScript 中,等于号(==)进行比较时,会先尝试类型转换再比较值,而全等号(===)则严格比较类型和值。这个机制在基本类型与引用类型混合比较时,容易引发意外结果。

基本类型间的 == 比较:隐式转换常见但可控

基本类型(如 number、string、boolean、null、undefined、symbol、bigint)用 == 比较时,JS 会按抽象相等算法(Abstract Equality Comparison)做类型转换。例如:

  • 5 == "5" → true(字符串转为数字)
  • true == 1 → true(boolean 转为 number)
  • null == undefined → true(仅此一对特殊相等)
  • 0 == false → true(但 "" == false 也是 true)

这些转换有明确规则,但组合起来容易出错,尤其在条件判断中。

引用类型参与 == 比较:几乎总是 false,除非同源

引用类型(Object、Array、Function、Date、RegExp 等)用 == 比较时,不比较内容,只看是否指向同一个内存地址:

  • [1,2] == [1,2] → false(两个不同数组实例)
  • {} == {} → false(两个空对象也不等)
  • let a = []; let b = a; a == b → true(引用相同)

唯一例外是 null 和 undefined:它们是基本类型,但 == 下互等;其他引用值与基本值比较时,会先尝试转为原始值(调用 valueOf() 或 toString()),结果往往难以预测:

  • [1] == 1 → true(数组转字符串 "1",再转数字 1)
  • [0] == false → true([0].toString() → "0","0" == false → true)
  • new Date() == "2024-01-01" → 可能为 true(取决于日期字符串化结果)

为什么推荐优先使用 ===

全等号跳过类型转换,直接判别类型与值是否完全一致,行为可预测:

  • 5 === "5" → false(类型不同)
  • true === 1 → false
  • [1] === [1] → false(仍是不同引用)
  • null === undefined → false(类型不同)

对于引用类型的“内容相等”需求(如比较两个数组是否元素相同),应手动实现深比较或使用工具函数(如 JSON.stringify(a) === JSON.stringify(b) 仅适用于简单可序列化数据)。

实际开发中的建议

  • 默认使用 === 和 !==,避免隐式转换陷阱
  • 仅在明确需要宽松比较时(如表单输入校验中接受字符串数字),才谨慎使用 ==
  • 比较引用类型是否“逻辑相等”,不要依赖 == / ===,改用专门方法(如 Array.isArray()、Object.is()、Lodash 的 isEqual())
  • 注意 Object.is() 与 === 的细微差别(如 Object.is(NaN, NaN) === true,而 NaN === NaN 是 false)

理解 == 的转换逻辑有助于读懂旧代码,但新代码中坚守 === 是更安全、更清晰的选择。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1975

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2742

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

936

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3079

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5339

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2090

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

143

2025.11.30

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

529

2023.09.22

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

160

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn