类型转换
JavaScript 中的类型转换主要分为两种:隐式类型转换和显式类型转换。
隐式类型转换
-
数学运算:当进行数学运算时,JavaScript 会自动将字符串转换为数字。
let num = "42";
console.log(num + 2); // 输出 '422' -
比较运算:使用
==进行比较时会发生隐式类型转换,而使用===进行比较时不会发生类型转换。let a = "42";
let b = 42;
console.log(a == b); // 输出 true
console.log(a === b); // 输出 false -
布尔运算:当一个值用于布尔运算时,它会被隐式地转换为布尔值。
let a = "hello";
if (a) {
console.log("a is truthy"); // 输出
}
显式类型转换
显式类型转换是通过 JavaScript 提供的内置函数或全局对象将一种类型显式地转换为另一种类型。
-
转换为字符串:
String()函数:将任何类型的值转换为字符串。toString()方法:大多数 JavaScript 对象都有这个方法,用于将对象转换为字符串。- 使用加号运算符
+:当一个值与字符串进行加法运算时,它会被转换为字符串。
let num = 42;
console.log(String(num)); // 输出 '42'
console.log(num.toString()); // 输出 '42'
console.log(num + ""); // 输出 '42' -
转换为数字:
Number()函数:将字符串、布尔值或对象转换为数字。parseInt()函数:将字符串转换为整数。parseFloat()函数:将字符串转换为浮点数。
let str = "42";
console.log(Number(str)); // 输出 42
console.log(parseInt(str)); // 输出 42
console.log(parseFloat(str)); // 输出 42.0 -
转换为布尔值:
Boolean()函数:将任何类型的值转换为布尔值。
let str = "hello";
console.log(Boolean(str)); // 输出 true -
转换为对象:
Object()函数:将任何类型的值转换为对象。
let str = "hello";
let obj = Object(str); // 输出 String { '0': 'h', '1': 'e', '2': 'l', '3': 'l', '4': 'o', length: 5, [[PrimitiveValue]]: 'hello' } -
转换为函数:
Function()构造函数:将字符串转换为函数。
let str = 'function() { console.log("Hello, world!"); }';
let func = new Function(str);
func(); // 输出 Hello, world!
在进行类型转换时,需要注意转换的规则和可能产生的结果,例如parseInt()和parseFloat()在解析失败时会返回NaN(Not a Number),而Number()在转换失败时也会返回NaN。此外,toString()方法在某些对象上可能返回不同的结果,例如数组会返回元素组成的字符串,而null和undefined没有toString()方法,调用时会抛出错误。