惊呆了,为啥 [ ] == ![ ] 为 true

231 阅读1分钟

问题:Js 中,[ ] == ![ ] 的运算结果?那为何为 true

这涉及 JS 数据类型转换数据运算规则

一、💬 JS 的数据类型转换规则

  • JS 数据类型回顾

🍍 原始类型

string(字符串)、number(数字)、boolean(布尔 truefalse)、undefined(未定义)、null(空值)、symbol(唯一字符)、bigint(大整数)

🍍 引用类型

function(函数)、object(对象、数组)、Date(日期时间)、RegExp(正则)

  • JS 数据转换规则

如下图所示:

对象的转换中,指的对象是所有引用类型,引用类型(fucntionobject、数组、RegExp)调用 valueOf方法,得到的都是它本身,Date 类型数据 new Date().valueOf() 得到的是时间戳

image-20240620095915726.png

二、💬 JS 数据运算规则

运算规则分为三类:

算数元素、比较运算、逻辑运算

image-20240620105722052.png

💡 回到最初的问题

[ ] == ![ ] 的运算步骤

①、计算 ![ ] 为 false

②、[ ] == false

③、'' == false

④、0 == 0 结果为 true

// []==![]

// 第一步:计算 ![]
// 取反运算,先是对象[]->bollean的转换,为 true,取反为 false

// 第二步:计算 []==false
// 适用规则 “一端对象,一端原始,将对象转为原始再比较”
const arr = [];
arr.valueOf() // 得到的还是 arr
arr.toString() // '' 得到空字符串

// 第三步:计算 ''==false
// 两端类型不同,一个是 string,一个是 boolean,但都为原始类型,转为数字再比较,转为后都为 0

// 第四步:计算 0==0
// 两边类型相同,且任一一端没有对象,直接比较值,所以结果为 true

💡 总结

综上所述,JS 类型运算中,伴随着数据类型的隐式转换,所以在写程序逻辑判断的时候,严格相等 === 进行判断


📃 写在最后:推荐我的日常 demo 地址,涉及 jstsvuereact,欢迎访问 🎉🎉 ⭐

🔗 getee:daily_demo
🔗 github:daily_demo

image.png