JS语法让人困惑的点 “==与===”

js,语法,困惑 · 浏览次数 : 31

小编点评

== 和 === 这两个运算符在 JavaScript 中起着至关重要的作用,但它们在类型检查和等式判断中有着显著的不同。 == 用于比较两边的值类型是否相等,而 === 用于比较两边的值类型是否相等。 在上面的等式中: ```javascript console.log([]==![]); ``` 的执行结果为 `true`,因为 `[]` 是一个空数组,其长度为 `0`,因此 `[]==false` 其实是 `false`。 这是因为 `==` 在进行类型检查时会自动转换为原始类型,而 `===` 在进行类型检查时会进行类型强制转换。 由于 `[]` 的类型是 `object`,而 `false` 的类型是 `number`,所以 `==` 在进行类型检查时会抛出异常,而 `===` 将转换为 `number` 类型进行比较。 因此,在上述等式中,`==` 被用于将 `[]` 的类型转换为 `false`,而 `===` 被用于进行类型强制转换,使结果为 `true`。 希望这些解释能帮助您理解 == 和 === 的区别,以及在 JavaScript 中如何使用它们进行类型检查和等式判断。

正文

本文由葡萄城技术团队于博客园原创并首发
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

在JS中有很多神奇的语法,非常让人困惑,我们就先一一道来,相信你在开发中或多或少都踩过这些坑,或者让人无法理解。 今天我们就来说下 "==" 和 "==="

这题对于很多没有系统学过前端开发的技术人员来说,算个重点,来画起来,我们一起看。

(图片来源于网络)

请看题,以下执行结果是啥?

console.log([]==![]);

是不是很神奇
那么为什么会出现这种情况,我们从=====的特性说起
我们先来分析一下上面的等式:
1.左边是一个数组,右边是一个表达式,左边数组就是:[]  , 右边是一个数组的取反 ![] ,所以算是一个表达式,后面取反后得到 false

所以这里可以将等式替换为,相当于 []==false 的比较,

console.log([]==false);

这里,还是有点不符合逻辑,我们再继续拆分。
分析:因为这里用的是双等号,左边是数组,右边是值,所以根据双等号的特性,需要将两边都转换为原始类型,用ToString来转换,所以这里执行后显示为:

我们继续替换等式

console.log(''==false);

执行后结果为:true,是不是有点抓狂的感觉。
现在两边都为原始类型,但是类型还是不一样,左边是字符串,右边是bool 类型 ,所以这个 == 又要去干件大事了,继续转,将两边都转换为数值类型 。
那么继续转:

然后最终执行的表达式就是:

console.log(0==0);

执行结果为:true

所以表达式中如果需要比较,尽量使用===,因为==在执行中非常诡异,给大家再举个例子:

console.log(true==[1]);

是不是神奇的知识又增加了!

在后续我们会为大家带来更多有趣内容介绍~

拓展阅读

详解商业智能前世今生,嵌入式BI如何百花齐放?

使用WIX进行商业智能OEM打包

数据可视化分析工具如何在国内弯道超车?

与JS语法让人困惑的点 “==与===”相似的内容:

JS语法让人困惑的点 “==与===”

在JS中有很多神奇的语法,非常让人困惑,我们就先一一道来,相信你在开发中或多或少都踩过这些坑,或者让人无法理解。 今天我们就来说下 "`==`" 和 "`===`" 这题对于很多没有系统学过前端开发的技术人员来说,算个重点,来画起来,我们一起看。

如何操作(增、删、改、查)常见的 HTML 元素呢?(包含原生 js 和 JQuery 语法对照)

本文包含针对常见 HTML 元素的增删改查等操作,从原生 js 和 JQuery 两个纬度进行对比列举。

【技巧】JS代码这么写,前端小姐姐都会爱上你

这篇文章分享了JavaScript编程中的实用技巧,包括解构赋值的短路语法避免错误、深度解构及默认值设定,以及数组操作如条件添加元素、获取最后一个元素和使用includes优化条件判断。此外,还介绍了从URL解析参数、页面滚动功能和获取滚动距离的JS片段。作者提倡使用这些技巧提升代码质量和效率,并邀...

Vue源码学习(四):渲染第三步,将ast语法树转换为渲染函数

好家伙, Vue源码学习(三):渲染第二步,创建ast语法树, 在上一篇,我们已经成功将 我们的模板 转换为ast语法树 接下来我们继续进行操作 1.方法封装 由于代码太多,为了增加代码的可阅读性 我们先将代码进行封装 index.js import { generate } f

Vue源码学习(五):渲染第四步,生成虚拟dom并将其转换为真实dom

好家伙, 前情提要: 在上一篇我们已经成功将ast语法树转换为渲染函数 现在我们继续 1.项目目录 代码已开源https://github.com/Fattiger4399/analytic-vue.git手动调试一遍, 胜过我解释给你听一万遍 新增文件:vnode/index.js vnode/p

2023年Vue开发中的8个最佳工具

前言 Vue.js,一款当今非常流行的基于JavaScript的开源框架,旨在构建动态的可交互应用。 Vue.js以其直观的语法和灵活的架构而广受全球开发者的欢迎和赞誉。随着时间的推移,Vue不断进化,为开发者提供更多优秀的工具,以提高他们的效率,构建卓越的应用。 在本文中,小编将为大家介绍八款适用

React框架运行机制

React框架运行主流程 1.JSX是JS语言的扩展,被babel编译后,会转换成React.creatElement(),这个方法返回的是一个虚拟DOM。 2.将虚拟DOM渲染到真实DOM的方法是ReactDom.render()。 在React的组件生命周期中,render是灵魂,它创建一个虚拟

next.js app目录 i18n国际化简单实现

最近在用next写一个多语言的项目,找了好久没找到简单实现的教程,实践起来感觉都比较复杂,最后终于是在官方文档找到了,结合网上找到的代码demo,终于实现了,在这里简单总结一下。 此教程适用于比较简单的项目实现,如果你是刚入门next,并且不想用太复杂的方式去实现一个多语言项目,那么这个教程就挺适合

JavaScript之正则表达式

正则表达式(RegExp) 正则表达式不是JS独有的内容,大部分语言都支持正则表达式 JS中正则表达式使用得不是那么多,我们可以尽量避免使用正则表达式 在JS中,正则表达式就是RegExp对象,RegExp 对象用于将文本与一个模式匹配 正则表达式(regular expressions, 规则表达

调用了这么久的JS方法是长在对象、类、值本身还是原型链上?

调用了这么久的JS方法是长在对象、类、值本身还是原型链上? JavaScript这门语言总是能带给我惊喜,在敲代码的时候习以为常的写法,退一步再看看发现自己其实对很多基操只有表面的使用,而从来没思考过为何要这样操作。 今天整理JS代码的时候突然发出灵魂三连问: 为什么有些时候操作对象,可以直接调用对