大多数情况下,运算符和函数会自动将给定的值转换为正确的类型。
例如,alert
会自动将任何值转换为字符串以显示。数学运算将值转换为数字。
还有一些情况下,我们需要明确地将值转换为预期类型。
在本章中,我们不会介绍对象。现在,我们只讨论基本类型。
稍后,在学习了对象之后,在章节 对象到原始类型转换 中,我们将看到对象如何适应。
字符串转换
当我们需要一个值的字符串形式时,就会发生字符串转换。
例如,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"
,依此类推。
数字转换
在数学函数和表达式中,数字转换会自动发生。
例如,当除法 /
应用于非数字时
alert( "6" / "2" ); // 3, strings are converted to numbers
我们可以使用 Number(value)
函数将 value
显式转换为数字
let str = "123";
alert(typeof str); // string
let num = Number(str); // becomes a number 123
alert(typeof num); // number
当我们从基于字符串的源(如文本表单)读取值但希望输入数字时,通常需要显式转换。
如果字符串不是有效的数字,则此类转换的结果为 NaN
。例如
let age = Number("an arbitrary string instead of a number");
alert(age); // NaN, conversion failed
数字转换规则
值 | 变为… |
---|---|
undefined |
NaN |
null |
0 |
true 和 false |
1 和 0 |
字符串 |
从开头和结尾删除空格(包括空格、制表符 \t 、换行符 \n 等)。如果剩余的字符串为空,则结果为 0 。否则,从字符串中“读取”数字。错误会给出 NaN 。 |
示例
alert( Number(" 123 ") ); // 123
alert( Number("123z") ); // NaN (error reading a number at "z")
alert( Number(true) ); // 1
alert( Number(false) ); // 0
请注意,null
和 undefined
在此处的行为不同:null
变为零,而 undefined
变为 NaN
。
大多数数学运算符也会执行此类转换,我们将在下一章中看到。
布尔转换
布尔转换是最简单的转换。
它发生在逻辑运算中(稍后我们会遇到条件测试和其他类似的东西),但也可以通过调用 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
。
alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)
总结
使用最广泛的三种类型转换是转换为字符串、转换为数字和转换为布尔值。
字符串转换
– 在我们输出某些内容时发生。可以使用 String(value)
执行。原始值的字符串转换通常很明显。
数字转换
– 在数学运算中发生。可以使用 Number(value)
执行。
转换遵循以下规则
值 | 变为… |
---|---|
undefined |
NaN |
null |
0 |
true / false |
1 / 0 |
字符串 |
字符串按“原样”读取,忽略两侧的空格(包括空格、制表符 \t 、换行符 \n 等)。空字符串变为 0 。错误会产生 NaN 。 |
布尔值转换
– 在逻辑运算中发生。可以使用 Boolean(value)
执行。
遵循以下规则
值 | 变为… |
---|---|
0 、null 、undefined 、NaN 、"" |
false |
任何其他值 | true |
这些规则中的大多数都很容易理解和记忆。人们通常会犯错误的显着例外是
undefined
作为数字是NaN
,而不是0
。"0"
和仅包含空格的字符串(如" "
)作为布尔值是 true。
这里没有涉及对象。在学习了有关 JavaScript 的更多基础知识后,我们将在本章后面的 对象到原始值转换 中重新讨论它们,该部分专门针对对象。
评论
<code>
标签,对于多行代码,请将其包装在<pre>
标签中,对于 10 行以上的代码,请使用沙盒 (plnkr、jsbin、codepen……)