JavaScript 类型转换
- 默认模式
- 浅蓝色模式
- 淡绿色模式
- 深夜模式
什么是类型转换?
简单来说,类型转换就是将一种数据类型的值,转换为另一种数据类型的过程。
JavaScript 是一种动态类型语言,这意味着变量在声明时不需要指定类型,并且可以在运行时被赋予不同类型的值。在操作中,当运算符发现操作数的类型与预期不符时,就会自动进行类型转换。
显式类型转换
显式类型转换,也常被称为 “强制转换”,指的是开发者通过代码明确指示要将一种类型转换为另一种类型。
1. 转换为字符串
将其他类型的值转换为字符串是非常常见的需求。
我们经常使用String()
函数或者是toString()
方法来实现将其他类型转换为字符串。例如:
String(200); // 将数字 200 转换为字符串并返回
String(150 + 50); // 将数字表达式转换为字符串并返回
下面是使用 Number 的toString()
方法实现类型转换,例如:
(200).toString(); // 将数字 200 转换为字符串并返回
(150 + 50).toString(); // 将数字表达式转换为字符串并返回
值得注意的是,null
和undefined
也可以被String()
安全地转换为 "null" 和 "undefined"。
另一种巧妙的方法是使用数值 + 空字符串实现类型转换,例如:
150 + 50 + ""; // 将数字表达式转换为字符串,结果依然是 "200"
2. 转换为数字
将值转换为数字在计算时至关重要。
Number()
函数是万能的选择,它可以使用它处理任何类型。
例如,Number("200") 会得到数字 200,而 Number("kaicz") 则会得到 NaN(表示不是一个数字)。
Number("200"); // 将字符串 "200" 转换为数字
Number("kaicz"); // NaN(表示不是一个数字)错误
专门用于字符串的parseInt()
和parseFloat()
函数也非常实用。它们会尝试从字符串开头解析数字,直到遇到非数字字符为止。
parseInt("200px"); // 解析为整数 200
+"200"; // 使用一元加号也会得到整数 200
3. 转换为布尔值
布尔转换通常用于条件判断。使用Boolean()
函数可以明确进行转换。
在 JavaScript 中,有一些值会被转换为 false
,我们称之为 “假值”。
假值包括:false、0、空字符串("")、null、undefined、NaN。除此之外的所有其他值,都会被转换为 true
。
隐式类型转换
隐式类型转换发生在代码的背后,由 JavaScript 引擎自动完成。理解它非常重要,可以避免很多意想不到的结果。
1. 字符串的隐式转换
当使用加号+
运算符时,如果其中一侧是字符串,另一侧是非字符串,则非字符串会被隐式转换为字符串,然后进行拼接。
"150" + 50; // 结果是 "15050" 而不是 "200"
2. 数字的隐式转换
除了加号+
以外的其他算术运算符(如 -, *, /, %)都会将操作数转换为数字。
"200" - 50; // 结果是 150
"10" * "20"; // 结果是 200
"100" / "2"; // 结果是 50
"5" % "2"; // 结果是 1
3. 布尔值的隐式转换
在逻辑判断和流程控制中,如if
语句、while
循环或逻辑运算符(&&
,||
,!
)中,条件表达式会自动进行布尔转换。
if ("hello") {
console.log("这个字符串被转换为 true");
}
在上面的例子中,非空字符串 "hello" 被隐式转换为 true
,因此条件成立。
4. 相等运算符的陷阱
双等号==
运算符在比较时,如果两边的类型不同,会先进行隐式类型转换,然后再比较值。
这可能导致一些反直觉的结果,例如0 == false
的结果是 true
。
而三等号===
是严格相等运算符,它不会进行类型转换,要求值和类型都相同才返回 true
。
为了避免难以调试的bug,我们强烈推荐始终使用===
和!==
进行比较。
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈