显式转换是通过明确的方式将一种类型转换为另一种类型。这通常通过使用内置的全局函数或运算符来实现。
使用 String()
函数:
let num = 42;
let str = String(num); // "42"
使用 .toString()
方法:
let num = 42;
let str = num.toString(); // "42"
使用 Number()
函数:
let str = "42";
let num = Number(str); // 42
使用 parseInt()
和 parseFloat()
函数:
let str = "42.5";
let intNum = parseInt(str); // 42
let floatNum = parseFloat(str); // 42.5
使用 +
一元运算符:
let str = "42";
let num = +str; // 42
使用 Boolean()
函数:
let str = "Hello";
let bool = Boolean(str); // true
使用双重否定 !!
运算符:
let num = 0;
let bool = !!num; // false
隐式转换发生在表达式求值时,JavaScript 自动地将一种类型转换为另一种类型。这种转换往往不易察觉,可能导致意外行为。
当一个非字符串类型与字符串进行拼接时,JavaScript 会将非字符串类型隐式转换为字符串:
let result = "The answer is " + 42; // "The answer is 42"
当进行算术运算时,JavaScript 会将非数字类型隐式转换为数字:
let result = "5" - 3; // 2
let result = "5" * "2"; // 10
let result = true + 1; // 2
let result = false - 1; // -1
在条件语句中,JavaScript 会将值隐式转换为布尔值:
if ("") {
// 这个代码块不会执行,因为 "" 被转换为 false
}
if (0) {
// 这个代码块不会执行,因为 0 被转换为 false
}
if ([]) {
// 这个代码块会执行,因为 [] 被转换为 true
}
JavaScript 中的一些特殊情况需要特别注意:
空字符串、零、null
、undefined
和 NaN
转换为布尔值时为 false
,其他值转换为布尔值时为 true
。
对象转换为原始类型:
toString()
方法。valueOf()
方法(如果没有定义,则调用 toString()
方法)。==
vs ===
:
==
进行类型转换后再比较。===
不进行类型转换,要求类型和值都相同。console.log(1 == '1'); // true
console.log(1 === '1'); // false
console.log(null == undefined); // true
console.log(null === undefined); // false
console.log([] == false); // true
console.log([] === false); // false
String()
、Number()
、Boolean()
、parseInt()
、parseFloat()
、.toString()
等。==
与 ===
的区别,避免潜在的错误。