【前端每天一题】🔥 第 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
相关推荐
宿6746 小时前
vue3-包管理器
前端·vue.js
@PHARAOH6 小时前
WHAT - Remix 入门和基本实践:理解两套产物
前端·remix
黄敬峰6 小时前
一文搞懂 Text2SQL:用大模型让自然语言直接查数据库
面试
mayaairi7 小时前
Vue2 生命周期完全指南:从创建到销毁的8个钩子函数
前端·javascript·vue.js
xy34537 小时前
axure9.0 如何打造一个计时器(简单版)
前端·ui·html·axure·原型·产品设计
IMPYLH8 小时前
HTML 的 <pre> 元素
前端·javascript·html
tsumikistep9 小时前
【前端】Vue + Axios 跨域问题实战:7070 代理转发 8080 + 401 报错分析(黑马外卖)
前端·javascript·vue.js
lichenyang4539 小时前
鸿蒙首页从等高商品 Grid 到双列瀑布流:同一张图也能做出小红书式浏览节奏
前端
里欧跑得慢9 小时前
Flutter主题与样式详解
前端·css·flutter·web