JavaScript 中的类型转换主要分为两种:隐式类型转换和显式类型转换。
隐式类型转换
数学运算:当进行数学运算时,JavaScript 会自动将字符串转换为数字。
javascriptlet num = "42"; console.log(num + 2); // 输出 '422'
比较运算:使用
==
进行比较时会发生隐式类型转换,而使用===
进行比较时不会发生类型转换。javascriptlet a = "42"; let b = 42; console.log(a == b); // 输出 true console.log(a === b); // 输出 false
布尔运算:当一个值用于布尔运算时,它会被隐式地转换为布尔值。
javascriptlet a = "hello"; if (a) { console.log("a is truthy"); // 输出 }
显式类型转换
显式类型转换是通过 JavaScript 提供的内置函数或全局对象将一种类型显式地转换为另一种类型。
转换为字符串:
String()
函数:将任何类型的值转换为字符串。toString()
方法:大多数 JavaScript 对象都有这个方法,用于将对象转换为字符串。- 使用加号运算符
+
:当一个值与字符串进行加法运算时,它会被转换为字符串。
javascriptlet num = 42; console.log(String(num)); // 输出 '42' console.log(num.toString()); // 输出 '42' console.log(num + ""); // 输出 '42'
转换为数字:
Number()
函数:将字符串、布尔值或对象转换为数字。parseInt()
函数:将字符串转换为整数。parseFloat()
函数:将字符串转换为浮点数。
javascriptlet str = "42"; console.log(Number(str)); // 输出 42 console.log(parseInt(str)); // 输出 42 console.log(parseFloat(str)); // 输出 42.0
转换为布尔值:
Boolean()
函数:将任何类型的值转换为布尔值。
javascriptlet str = "hello"; console.log(Boolean(str)); // 输出 true
转换为对象:
Object()
函数:将任何类型的值转换为对象。
javascriptlet str = "hello"; let obj = Object(str); // 输出 String { '0': 'h', '1': 'e', '2': 'l', '3': 'l', '4': 'o', length: 5, [[PrimitiveValue]]: 'hello' }
转换为函数:
Function()
构造函数:将字符串转换为函数。
javascriptlet 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()
方法,调用时会抛出错误。