在 JS 的世界里,
==和===就像两个性格迥异的双胞胎:
- 一个“滥好人”,总爱帮你做“隐式转换”;
- 一个“冷面杀手”,非得你一模一样才点头。
本节我们来讲讲 JS 里令人闻风丧胆的 类型转换(Type Coercion)。
🧂 什么是类型转换?
JavaScript 是一门“弱类型语言”,当你用不同类型做比较或运算时,它会自动帮你转换类型,这就是所谓的类型转换。
- 显式转换:你自己用函数改类型
- 隐式转换:JavaScript 自作主张
🧪 常见的隐式转换陷阱
'5' + 1 // "51"
'5' - 1 // 4
'5' * '2' // 10
true + 1 // 2
false + 1 // 1
null + 1 // 1
undefined + 1 // NaN
💔 == 与 === 的区别
| 操作符 | 名称 | 是否转换类型 |
|---|---|---|
== | 相等 | ✅ 是 |
=== | 全等 | ❌ 否 |
1 == '1' // true
1 === '1' // false
0 == false // true
0 === false // false
null == undefined // true
null === undefined // false
🧠 显式转换
String(123); // "123"
Number("123"); // 123
Boolean("hello"); // true
!!"hello"; // true
🕳️ 出人意料的坑
[] == ![] // true
false == '0' // true
null == 0 // false
[] == 0 // true
[1] == 1 // true
[1,2] == "1,2" // true
🧪 小练习
'5' + 2 // "52"
true + false // 1
null == 0 // false
[] == false // true
!!undefined // false
🧯 总结
| 比较/转换 | 建议 |
|---|---|
== vs === | ✅ 用 === |
| 隐式转换 | ❌ 易出错 |
| 显式转换 | ✅ 更可控 |