Skip to main content

在 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 ===✅ 用 ===
隐式转换❌ 易出错
显式转换✅ 更可控