大多数情况下,运算符和函数会自动将传递给它们的值转换为正确的类型。
例如,alert
会自动将任何值转换为字符串以显示它,而数学运算会将值转换为数字。
但在某些情况下,我们需要显式地将值转换为期望的类型。
暂不讨论对象
在本章中,我们不会涉及对象。目前,我们只讨论原始类型。
稍后,在学习对象之后,我们将在“对象到原始值的转换”一章中了解对象是如何适用的。
字符串转换(String Conversion)
当我们需要一个值的字符串形式时,就会发生字符串转换。
例如,alert(value)
会将值转换为字符串以进行显示。
我们也可以调用 String(value)
函数将一个值转换为字符串:
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)
在数学函数和表达式中,数值转换是自动发生的。
例如,当除法 /
应用于非数字时:
alert( "6" / "2" ); // 3, strings are converted to numbers
我们可以使用 Number(value)
函数将一个值显式地转换为数字:
let str = "123"; alert(typeof str); // string let num = Number(str); // becomes a number 123 alert(typeof num); // number
当我们从基于字符串的来源(如文本表单)读取一个值,但期望输入的是数字时,通常需要显式转换。
如果字符串不是一个有效的数字,那么这种转换的结果将是 NaN
。
例如:
let age = Number("不是数字的任意字符串"); alert(age); // NaN, 转换失败
数字转换规则:
-
undefined
→NaN
-
null
→0
-
true
/false
→1
/0
-
字符串:去掉首尾空格后,如果是有效数字,则转换为对应数字,否则为
NaN
示例:
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
。
例如:
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 中最基础也最常见的类型变化机制。
