大多数情况下,运算符和函数会自动将传递给它们的值转换为正确的类型。
例如,alert 会自动将任何值转换为字符串以显示它,而数学运算会将值转换为数字。
但在某些情况下,我们需要显式地将值转换为期望的类型。
暂不讨论对象
在本章中,我们不会涉及对象。目前,我们只讨论原始类型。
稍后,在学习对象之后,我们将在“对象到原始值的转换”一章中了解对象是如何适用的。
字符串转换(String Conversion)
当我们需要一个值的字符串形式时,就会发生字符串转换。
例如,alert(value) 会将值转换为字符串以进行显示。
我们也可以调用 String(value) 函数将一个值转换为字符串:
|
1 2 3 4 5 |
let value = true; alert(typeof value); // boolean value = String(value); // now value is a string "true" alert(typeof value); // string |
字符串转换大多是显而易见的。false 变成 "false",null 变成 "null",等等。
数字转换(Numeric Conversion)
在数学函数和表达式中,数值转换是自动发生的。
例如,当除法 / 应用于非数字时:
|
1 |
alert( "6" / "2" ); // 3, strings are converted to numbers |
我们可以使用 Number(value) 函数将一个值显式地转换为数字:
|
1 2 3 4 5 6 |
let str = "123"; alert(typeof str); // string let num = Number(str); // becomes a number 123 alert(typeof num); // number |
当我们从基于字符串的来源(如文本表单)读取一个值,但期望输入的是数字时,通常需要显式转换。
如果字符串不是一个有效的数字,那么这种转换的结果将是 NaN。
例如:
|
1 2 3 |
let age = Number("不是数字的任意字符串"); alert(age); // NaN, 转换失败 |
数字转换规则:
-
undefined→NaN -
null→0 -
true/false→1/0 -
字符串:去掉首尾空格后,如果是有效数字,则转换为对应数字,否则为
NaN
示例:
|
1 2 3 4 |
Number(" 123 ") // 123 Number("123z") // NaN Number(true) // 1 Number(null) // 0 |
请注意,null 和 undefined 在这里的表现不同:null 会变为 0,而 undefined 会变为 NaN。
大多数数学运算符也会执行这样的转换,我们将在下一章中看到。
布尔转换(Boolean Conversion)
布尔转换是最简单的一种。它发生在逻辑运算中(稍后我们会遇到条件判断和类似的操作),也可以通过调用 Boolean(value) 来显式执行。
转换规则:
-
被直观认为是“空”的值(如
0、空字符串""、null、undefined和NaN)会变为false。 -
其他值都会变为
true。
例如:
|
1 2 3 4 5 |
alert( Boolean(1) ); // true alert( Boolean(0) ); // false alert( Boolean("hello") ); // true alert( Boolean("") ); // false |
请注意:字符串 "0" 的布尔值是 true。
有些语言(例如 PHP)将 "0" 视为 false,但在 JavaScript 中,非空字符串始终为 true。
总结

最常用的三种类型转换是:转字符串、转数字 和 转布尔值。
字符串转换(String Conversion)
发生在我们输出内容时。可通过 String(value) 显式转换。
对原始值来说,转换通常是显而易见的。
数字转换(Numeric Conversion)
发生在数学运算中。可通过 Number(value) 显式转换。
转换规则:
-
undefined→NaN -
null→0 -
true / false→1 / 0 -
字符串:去除空格后为有效数字则转换,否则为
NaN
布尔转换(Boolean Conversion)
发生在逻辑操作中。可通过 Boolean(value) 显式转换。
为 false 的值:
-
0 -
""(空字符串) -
null -
undefined -
NaN
其他值均为 true。
这三种转换是 JavaScript 中最基础也最常见的类型变化机制。