在 JavaScript 中,数据类型的转换主要发生在以下几种情况:
- 不同类型的值进行运算
- 不同类型的值进行比较
- 使用typeof操作符获取变量类型
- 显示进行类型转换
数据类型的转换遵循以下规则:
- 字符串拼接会执行字符串类型转换:例如 1 + ‘2’ => ’12’
- 相加的两侧,只要有一个是字符串,则另一个也会转为字符串进行拼接:例如 1 + 2 + ‘3’ => ’33’
- 减、乘、除运算会执行数值类型转换
- 相等/不相等比较会依据比较运算符执行类型转换:
- == 会执行类型转换再比较:1 == ‘1’ => true
- === 不会执行类型转换,直接比较类型和值:1 === ‘1’ => false
- typeof 一律返回字符串:typeof 1 => ‘number’
- Boolean会把除了0、NaN、”、null、undefined以外的值转为true,其他转为false
- Number可以将字符串、布尔值转为数字,null和undefined转为NaN
- String可以将任意类型的值转为字符串
- Object会将原始类型的值转为对应的包装对象
例如:
1 + '2' // '12' 字符串拼接,执行字符串转换
1 - '2' // -1 减法运算,执行数值转换
1 == '1' // true 使用==,执行类型转换
1 === '1' // false 使用===,不执行类型转换
typeof 1 // 'number'
typeof '1' // 'string'
Boolean(0) // false
Boolean(1) // true
Boolean('') // false
Number('1') // 1
Number(true) // 1
Number(null) // 0
Number(undefined) // NaN
String(1) // '1'
String(true) // 'true'
let a = 1;
let b = new Number(a); // 使用Number创建对象
所以总结来说,JavaScript 中的数据类型转换主要遵循:
- 运算和比较时,会根据操作符执行类型转换
- typeof 总是返回字符串
- Boolean、Number、String可以执行显式类型转换
- Object会将原始类型的值转换为对象
在代码中,我们应尽量避免不必要的类型转换,特别是 == 运算,这可以让程序行为更加清晰可预测。