【前端每天一题】🔥 第 12 题:== 与 === 的区别?为什么 [] == ![] 是 true?

== 与 === 的区别 - 前端高频必考题

第 12 题:== 与 === 的区别?为什么 [] == ![] 是 true?

这道题属于前端面试常年 TOP 级别,必考。

第 12 题:== 与 === 的区别?为什么 [] == ![] 是 true?


一、===(严格相等)

不进行类型转换,类型不同必定不等。

示例:

javascript 复制代码
1 === '1'           // false
true === 1          // false
null === undefined  // false

二、==(抽象相等)

会进行复杂的隐式类型转换。

转换规则(必须背):

  1. 对象 == 基本类型 → 对象转成基本类型(调用 valueOf 或 toString)
  2. 字符串、数字、布尔值 → 最终都会先转成数字比较
  3. null 和 undefined 只互相相等
  4. NaN == 任何值都是 false

三、重点:对象与基本类型比较

复制代码
对象 == 基本类型 → 对象 → 基本类型(toPrimitive)

示例:

javascript 复制代码
[] == 0   // true
// [] -> '' -> 0 == 0

为什么 [] 会变成 ""

因为:

javascript 复制代码
[].toString() === '' 

四、终极面试题:为什么 [] == ![] 是 true?

这是前端面试真·高频题。

✔ 第一步:先算 ![]

  • [] 是对象,所以是真值 → true
  • ![]false

所以表达式变成:

javascript 复制代码
[] == false

✔ 第二步:false 转成数字

根据规则:布尔值 → 数字

  • false → 0
javascript 复制代码
[] == 0

✔ 第三步:对象转基本类型(数组 → 字符串 → 数字)

  • [].toString()''
  • Number('')0

最终:

ini 复制代码
0 == 0 → true

五、另外三个容易考的陷阱题(你顺便拿下)

❓ 1. "0" == false → ?

  • false → 0
  • "0" → Number("0") = 0
  • 结果: true

❓ 2. [] == [] → ?

  • 引用类型比较地址
  • 两个不同数组地址不同
  • 结果: false

❓ 3. null == undefined → ?

  • 规则规定它俩互相相等
  • 结果: true

六、总结表(面试官最爱)

表达式 结论 原因
[] == ![] true ![]→false→0;[]→""→0
[] == false true false→0;[]→0
[] == 0 true []→""→0
"" == 0 true ""→0
null == undefined true 规则
[] == [] false 引用不同

七、速记卡片(背这个就够了)

ini 复制代码
🎯 === 不转换类型
🎯 == 会类型转换,最终都转成数字比较

📌 布尔转数字:true=1,false=0
📌 对象和基本类型比较:对象 → 基本类型(toString/valueOf)
📌 数组变成:[].toString() === ''

🔥 必考:[] == ![]
[] == false → false→0;[]→""→0 → 0==0 → true
相关推荐
前端一课1 小时前
【前端每天一题】🔥 第 13 题:原型链查找规则是什么?为什么对象能访问到方法?
前端·面试
前端一课1 小时前
【前端每天一题】🔥 第 11 题:this 的指向规则(前端高频必考题)
前端·面试
一 乐1 小时前
餐厅管理智能点餐系统|基于java+ Springboot的餐厅管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
北极糊的狐1 小时前
父组件向子组件传参时,传递数组和对象类型的参数的方法
前端·javascript·vue.js
前端一课1 小时前
【前端每天一题】🔥 第 9 题:防抖(debounce)与节流(throttle)的区别?如何实现?
前端·面试
前端一课2 小时前
【前端每天一题】🔥 第 10 题:浅拷贝 vs 深拷贝?如何手写深拷贝?
前端·面试
前端一课2 小时前
【前端每天一题】🔥 第 8 题:什么是事件委托?它的原理是什么?有哪些优点和常见坑? - 前端高频面试题
前端·面试
前端一课2 小时前
【前端每天一题】🔥第7题 事件冒泡与事件捕获 - 前端高频面试题
前端·面试
前端一课2 小时前
【前端每天一题】 第 5 题:Promise.then 执行顺序深入题(微任务队列机制)
前端·面试