JS语法让人困惑的点 “==与===”
本文由葡萄城技术团队于博客园原创并首发
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
在JS中有很多神奇的语法,非常让人困惑,我们就先一一道来,相信你在开发中或多或少都踩过这些坑,或者让人无法理解。 今天我们就来说下 "==
" 和 "===
"
这题对于很多没有系统学过前端开发的技术人员来说,算个重点,来画起来,我们一起看。
(图片来源于网络)
请看题,以下执行结果是啥?
console.log([]==![]);
是不是很神奇
那么为什么会出现这种情况,我们从==
与===
的特性说起
我们先来分析一下上面的等式:
1.左边是一个数组,右边是一个表达式,左边数组就是:[]
, 右边是一个数组的取反 ![]
,所以算是一个表达式,后面取反后得到 false
,
所以这里可以将等式替换为,相当于 []==false
的比较,
console.log([]==false);
这里,还是有点不符合逻辑,我们再继续拆分。
分析:因为这里用的是双等号,左边是数组,右边是值,所以根据双等号的特性,需要将两边都转换为原始类型,用ToString来转换,所以这里执行后显示为:
我们继续替换等式
console.log(''==false);
执行后结果为:true
,是不是有点抓狂的感觉。
现在两边都为原始类型,但是类型还是不一样,左边是字符串,右边是bool 类型 ,所以这个 ==
又要去干件大事了,继续转,将两边都转换为数值类型 。
那么继续转:
然后最终执行的表达式就是:
console.log(0==0);
执行结果为:true
;
所以表达式中如果需要比较,尽量使用===
,因为==
在执行中非常诡异,给大家再举个例子:
console.log(true==[1]);
是不是神奇的知识又增加了!
在后续我们会为大家带来更多有趣内容介绍~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2022-02-23 前端生成PDF,让后端刮目相看