JavaScript类型转换分隐式和显式两种,隐式转换常发生在+运算符、算术运算、条件判断及==比较中,易引发bug;应优先使用===、Number()、String()等显式转换避免陷阱。
JavaScript 类型转换是指在运算或比较过程中,把一种数据类型自动或手动变成另一种的过程。它分隐式(自动)和显式(手动)两种,核心影响代码行为是否可预期。
JavaScript 是弱类型语言,很多操作不强制要求类型一致,引擎会悄悄帮你转:
"1" + 2 → "12"(数字转字符串拼接)"5" - "2" → 3(两边都转成数字再计算)if ("hello") → true(非空字符串是真值)0 == false → true(false 先转成 0 再比)== 是抽象相等(会先做类型转换再比较),=== 是严格相等(类型和值都必须相同,不转换)。
5 == "5" → true(字符串 "5" 被转成数字 5)5 === "5" → false(类型不同:number vs string)null == undefined → true(这是 == 的特殊规则,但 null === undefined 是 false)0 == false → true(false 转为 0),而 0 === false → false这些看似合理的结果,容易引发 bug:
[] == ![] → true(空数组转为 "",再转为 0;![] 是 true,再取反是 false,false 转为 0)[0
] == false → true([0] → "0" → 0,false → 0){} + [] → "[object Object]"(对象转字符串,数组转空字符串)[] + {} → "[object Object]"(同上,但顺序不影响 toString 行为)不是禁用,而是有意识地控制:
=== 和 !== 替代 == 和 !=
Number()、parseInt() 或 parseFloat()
String(),而不是 .toString()(后者对 null/undefined 报错)false、0、""、null、undefined、NaN