JavaScript 词条目录
前端Wiki/词条/类型转换与隐式强制

类型转换与隐式强制

定义JavaScript 弱类型语言中值在类型之间自动或手动转换的规则与陷阱

JS 的转换分显式与隐式两种。显式转换是主动调用 API:Number('42')、String(x)、Boolean(obj),其中 Boolean 结果由真假值表决定(0、''、null、undefined、NaN、false 之外全真)。隐式强制则是引擎在运算时偷偷干活:+ 两边有字符串就拼接、没有就走数字相加,比较运算符 == 会先把两边转成同类型。

著名的面试题 [] == ![] 结果 true,就是因为 ![] 先转成 false,空数组再被 ToPrimitive 转成空字符串、最后转成数字 0 与 false 的 0 相等。工程上推荐:永远用 === 严格相等避开隐式坑;数字转换用 Number(str) 而非 +str,解析含单位字符串用 parseInt 并带上进制参数。implicitly 的坑不是用来背的,是用来避免的。

JavaScript
// 显式转换
console.log(Number('42'));    // 42
console.log(Number('42px'));  // NaN
console.log(parseInt('42px')); // 42
console.log(String(true));    // 'true'
console.log(Boolean(0));      // false(假值)

// 隐式强制的经典现场
console.log(1 + '2');      // '12'(字符串拼接)
console.log(1 - '2');      // -1(减法没有字符串语义)
console.log('3' * '4');    // 12
console.log([] == ![]);    // true(面试名场面)
console.log(null == undefined); // true
console.log(null === undefined); // false

// 对象转原始值
const obj = {
  valueOf() { return 42; }
};
console.log(obj + 1);            // 43
console.log(String({}));         // '[object Object]
⚠ 常见误区
🔗 相关词条类型转换数据类型
← 返回来源章节类型转换