问题:Js 中,[ ] == ![ ] 的运算结果?那为何为 true
这涉及 JS 数据类型转换及数据运算规则
一、💬 JS 的数据类型转换规则
- JS 数据类型回顾
🍍 原始类型
string(字符串)、number(数字)、boolean(布尔 true 和 false)、undefined(未定义)、null(空值)、symbol(唯一字符)、bigint(大整数)
🍍 引用类型function(函数)、object(对象、数组)、Date(日期时间)、RegExp(正则)
- JS 数据转换规则
如下图所示:
对象的转换中,指的对象是所有引用类型,引用类型(fucntion、object、数组、RegExp)调用 valueOf方法,得到的都是它本身,Date 类型数据 new Date().valueOf() 得到的是时间戳
二、💬 JS 数据运算规则
运算规则分为三类:
算数元素、比较运算、逻辑运算
💡 回到最初的问题
[ ] == ![ ] 的运算步骤
①、计算 ![ ] 为 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 地址,涉及 js、ts、vue、react,欢迎访问 🎉🎉 ⭐
🔗 getee:daily_demo
🔗 github:daily_demo