隐式转换

隐式转换

在某些操作中,JavaScript 自动将一种数据类型转换为另一种数据类型

以下是常见场景

字符串拼接

+ 时,如果其中一个操作数是字符串,另一个操作数会被自动转换为字符串

1
2
3
console.log(1 + "2"); // 输出: "12"
console.log("Hello" + 3); // 输出: "Hello3"
console.log(true + " world"); // 输出: "true world"

数字运算

数学运算时,非数字类型的值会被隐式转换为数字

1
2
3
4
console.log(10 - "5"); // 输出: 5
console.log("10" * 3); // 输出: 30
console.log("10" / 2); // 输出: 5
console.log("abc" - 1); // 输出: NaN (无法转换为数字)

布尔值

条件判断中,JavaScript 会将值隐式转换为布尔值

以下值被视为false

false 0 null undefined NaN ""(空字符串)

其他所有值都被视为 true

1
2
3
4
5
6
7
if ("") { // 为 false
console.log("This won't run");
}

if ("hello") {
console.log("Non-empty string is truthy"); // 输出: Non-empty string is truthy
}

==与===

==(宽松相等)与===(严格相等)的核心区别在于是否进行类型转换

  1. ===:直接比较 + 类型 ,类型不同立即返回false。例如5 === "5"false
  2. ==!=同理):若类型不同,按规则 隐式转换 后比较:
1
2
3
4
5
6
7
console.log(1 == "1");		// true (数字和字符串被隐式转换)
console.log(0 == false); // true (布尔值被转换为数字)
console.log("0" == false); // true (`false`转`0`,`"0"`转`0`)
console.log([] == 0); // true (空数组→空字符串→转`0`)
console.log([] == ![]); // true (![]转false→0,[]转0)
console.log(null == undefined); // true (特殊规则)
console.log(NaN == NaN); // false (`NaN`与任何值(包括自身)比较均为`false`)

最佳实践

  • 始终使用===避免隐式转换陷阱,提升代码可预测性。
  • 若需类型转换,应显式转换(如Number(str)String(num))而非依赖==