JS宽松相等(==)的隐式强制类型转换规则

发布时间:2026/8/20 10:59:12

JS宽松相等(==)的隐式强制类型转换规则
在本文开始前向读者推荐这篇文章的灵感来源《你不知道的JavaScript》具体来源为中卷第一部分第4章4.5小节“宽松相等和严格相等”。本文主要根据书中内容和笔者思考总结出宽松相等时隐式强制类型转换的规则不讨论其他比较的算法如Object.is()。并给出部分示例。注意个人总结难免疏漏如有错误希望读者能指出避免后续误导其他读者一、规则比较类型相同直接比较值是否相等。对象比较时指向同一个值时即视为相等而且对象比较时宽松相等和严格相等没有区别。此处涉及对象知识不再赘述。比较类型不同布尔转数字≈对象ToPromitive 抽象操作valueOf方法和toString方法字符串转数字。特殊情况null和undefined只和对方或者自身相等NaN ! NaNNaN不等于任何值0 -0二、特殊情况// 1. null 和 undefined console.log(null undefined); // true console.log(null undefined); // false // 2. NaN console.log(NaN NaN); // false console.log(NaN anyValue); // false console.log(NaN NaN); // false // 3. 0 和 -0 console.log(0 -0); // true console.log(0 -0); // true三、比较类型不同布尔转数字≈对象ToPromitive 抽象操作valueOf方法和toString方法字符串转数字。1、布尔值转数字值false - 0true - 12、对象ToPromitive 抽象操作当比较的双方仅有一方为对象时会触发这个操作。ToPromitive 抽象操作会根据传入的hint值来判断是先调用valueOf()方法还是toString()方法。hint值有三种number、string和default。如果提示是number先调用valueOf()如果返回的不是基本类型再调用toString()。如果提示是string先调用toString()如果返回的不是基本类型再调用valueOf()。如果提示是default先调用valueOf()如果返回的不是基本类型再调用toString()。但是在宽松相等比较的情况下不用考虑这么多只需要记住js内置常用的只有Date和String优先调用toString()方法其他都可以按valueOf()先调用非自定义的情况下。但是前提是valueOf()方法必须返回的是基本类型数字、字符串、布尔如果是非基本类型则会调用toString()方法。直接讲不易理解我们从例子来入手例[] false判断类型不同-隐式类型转换[]为对象非Date和String调用valueOf()方法会返回数组则调用toString()返回空字符串-转换布尔false布尔转数字false转为0-空字符串和0相比类型不同优先转字符串为数字空字符转数字为0-0和0比类型相同比较值值也相同判断为true。3、字符串转数字字符串内容转换结果示例仅包含数字整数对应的整数123→123包含小数点浮点数对应的浮点数3.14→3.14前导空格或制表符被忽略解析有效数字 -5 →-5十六进制格式对应的十进制数0xFF→255空字符串或仅空格0→0 →0包含非数字字符非前导NaN123abc→NaN1.2.3→NaN完全不包含数字NaNhello→NaNtrue→NaN四、例题可以先尝试做一下下面例题0 false false [] 0 {} [] ![] [null] foo [foo] 42 true 42 false答案0 false // true false // true [] // true 0 {} // false [] ![] // true [null] // true foo [foo] // true 42 true // false 42 false // false这里解析几个比较特殊的对于空对象{}由于对象的valueOf返回的是自身不是基本数据类型导致会跳过valueOf转而调用toString()而toString返回值为[object Object]转成数字是NaNNaN和任意值比较均不相等所以0 {}为false[] ![] // true这看起来确实很奇怪但一步步来就会明白原因。![]会强制类型转换为false所以就变成了[] false这个例子在三.3讲过不再赘述。[null]调用toString方法会返回空字符串最后来看这个例子42 true // false 42 false // false。42作为一个真值居然既不等于false也不等于true然而这个想法有点先入为主了。 true不代表判断比较的前者是否是真值同样的 false也不代表判断比较的前者是否是假值而是要按照规则一步步比较先转换布尔值为数字值再转换字符串为数字值最后得到 42 1 和 42 0。到这里显而易见答案确实都是false。所以《你不知道的JavaScript》的作者在书中建议无论什么情况下都不要使用 true 和 false比较的前者是真值还是假值与本身没有关系最后欢迎大家批评指正

相关新闻

开题答辩前夜别踩这5个坑:一份开题PPT的正确打开方式

开题答辩前夜别踩这5个坑:一份开题PPT的正确打开方式

2026/8/20 10:59:12

晚上十一点,宿舍熄了灯,只有小周的屏幕还亮着——明天上午九点开题答辩,PPT还停在第三页,模板换了四个,内容越改越乱。这场景每年毕业季都在重演。开题PPT做不好,轻则当场被老师连环追问,重则开…

网盘直链下载助手快速上手指南:一次安装,告别客户端下载束缚

网盘直链下载助手快速上手指南:一次安装,告别客户端下载束缚

2026/8/20 10:59:12

网盘直链下载助手快速上手指南:一次安装,告别客户端下载束缚 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中…

抖音视频下载工具免费完整攻略:无水印、批量、直播一次搞定

抖音视频下载工具免费完整攻略:无水印、批量、直播一次搞定

2026/8/20 10:59:12

抖音视频下载工具免费完整攻略:无水印、批量、直播一次搞定 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …

MiniMax H3视频生成模型结合Lora微调实战:从本地部署到风格定制

MiniMax H3视频生成模型结合Lora微调实战:从本地部署到风格定制

2026/8/20 11:59:14

1. 先搞清楚 MiniMax H3 和 Lora 到底能做什么如果你在找“无限制生成视频”或者“免费无限生成视频”的工具,那大概率会失望。目前所有公开的AI视频生成技术,无论是Sora、Runway还是MiniMax,都受限于算力、模型能力和平台规则,不…

基于CD4017与红外传感器的可编程感应开关设计与实现

基于CD4017与红外传感器的可编程感应开关设计与实现

2026/8/20 11:59:14

1. 项目概述:用经典数字芯片打造智能感应开关 最近在整理工作室的照明系统,发现一些角落的灯总是忘记关,比如储物柜内部、工作台下的工具抽屉。装个现成的红外感应模块吧,总觉得少了点DIY的乐趣,而且功能太固定&#x…

SpringBoot校园招聘系统开发实践与架构设计

SpringBoot校园招聘系统开发实践与架构设计

2026/8/20 11:59:14

1. 项目背景与核心需求 校园招聘系统是高校就业指导工作中的重要数字化工具。作为计算机专业毕业设计的选题,基于SpringBoot的应届毕业生校园招聘系统具有典型的B/S架构特征和实际应用价值。这个选题之所以适合作为毕业设计,主要体现在三个方面&#xff…

博世沃达丰华为联手:智能网联汽车“车路云网”协同架构深度解析

博世沃达丰华为联手:智能网联汽车“车路云网”协同架构深度解析

2026/8/20 11:59:14

1. 项目背景:一场关于“车”的“新基建”竞赛 如果你最近关注汽车行业,会发现一个有趣的现象:传统汽车巨头们不再只谈论马力、扭矩和零百加速,而是开始频繁提及一个词——“智能网联”。这背后,是一场关于未来出行话语…

企业微信二次开发:多类型消息发送接口完整实践

企业微信二次开发:多类型消息发送接口完整实践

2026/8/20 11:59:14

最近这半个月,无数研发兄弟都在找我吐槽同一个需求:“老板天天变着花样要给客户群发东西,今天要求发文字,明天要发带封面的早报,后天又要给大客户单独甩个PDF报价单过去。如果每加一种格式都要重写一套逻辑&#xff0c…

MathType 7.x 2024最新版:从安全下载到Word集成的完整安装指南

MathType 7.x 2024最新版:从安全下载到Word集成的完整安装指南

2026/8/20 11:49:14

如果你正在写论文、做技术文档,或者需要在演示文稿中插入复杂的数学公式,那么你一定遇到过这个难题:Word自带的公式编辑器功能有限,LaTeX虽然强大但学习曲线陡峭,而手写公式又不够规范。这时候,一个专业的数…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/19 9:17:18

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

2026/8/20 0:08:45

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com…

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

2026/8/20 0:08:45

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 判断你是否…

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

2026/8/20 0:08:45

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 按 3MF 官方规范的字面意思,一…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…