JavaScript 是一种弱类型语言,这意味着变量可以自动或显式地从一种类型转换为另一种类型。理解类型转换是掌握 JavaScript 的关键之一。
JavaScript 在需要时会自动进行类型转换:
// 数字与字符串相加
let result = '3' + 2; // "32" (字符串连接)
let result2 = '3' + true; // "3true"
// 数字与字符串相减
let result3 = '4' - '2'; // 2 (数字相减)
let result4 = '4' - 2; // 2
let result5 = '4' * '2'; // 8
let result6 = '4' / '2'; // 2
// 布尔值参与运算
let result7 = '5' - true; // 4 (true转换为1)
let result8 = '5' - false; // 5 (false转换为0)
let num = 123;
let str = String(num); // "123"
let str2 = num.toString(); // "123" (除了null和undefined)
// 使用加号运算符
let str3 = 5 + ""; // "5"
let str = "123";
let num = Number(str); // 123
// parseInt 和 parseFloat
let num2 = parseInt("123px"); // 123
let num3 = parseFloat("12.3"); // 12.3
// 一元加运算符
let num4 = +"123"; // 123
// 其他转换
let bool = true;
let num5 = Number(bool); // 1
let val1 = Boolean("hello"); // true
let val2 = Boolean(""); // false
let val3 = Boolean(0); // false
let val4 = Boolean(1); // true
let val5 = Boolean(null); // false
let val6 = Boolean(undefined); // false
let val7 = Boolean({}); // true
// 使用!!运算符
let val8 = !!"hello"; // true
// null 和 undefined
Number(null); // 0
Number(undefined); // NaN
// 对象转换
let obj = {toString() { return "123" }};
Number(obj); // 123
// 数组转换
Number([1]); // 1
Number([1,2]); // NaN
String([1,2,3]); // "1,2,3"
// == 会进行类型转换
'5' == 5; // true
null == undefined; // true
// === 严格相等,不进行类型转换
'5' === 5; // false
null === undefined; // false
理解 JavaScript 的类型转换规则对于避免 bug 和编写健壮的代码非常重要。建议在大多数情况下使用显式转换和严格相等运算符(===)来提高代码的清晰度和可靠性。