大多数情况,运算符和函数会自动把一个值转换成正确的类型。这称为“类型转换”。
例如,alert 函数自动将值转换为字符串展示。算术运算符则自动将值转换为数值。
当然也有需要我们显式将一个值转换成期待类型的场景。
⚠️暂时不讨论对象
在这一章中,我们还没有涉及到对象,先学习原始值。稍后在我们学习对象之后,会在《对象到原始值转换》一章学习对象的转换规则。
转换为字符串
字符串转换发生在期待字符串值的场景。
例如,alert(value) 就会将值转换成字符串形式后展示。
我们也可以通过调用 String(value) 函数来实现这个目的:
let value = true;alert(typeof value); // booleanvalue = String(value); // 现在值变为字符串 "true"alert(typeof value); // string
字符串转换规则非常明显。false 变成 "false",null 变成 "null" 等。
转换为数值
在数学函数和表达式中会自动发生数值转换。
例如,当 / 在非数字值上使用时:
alert( "6" / "2" ); // 3, 字符串被转为数值
我们可以使用 Number(value) 函数将参数显式转换成数值:
let str = "123";alert(typeof str); // stringlet num = Number(str); // 变成数值 123alert(typeof num); // number
当我们从基于字符串的源中(如文本输入框)读取内容的时候,希望当做数值处理,通常就需要显式转换。
let age = Number("an arbitrary string instead of a number");alert(age); // NaN。转换失败
数值转换规则如下:
| 值 | 转换为…… |
|---|---|
undefined |
NaN |
null |
0 |
true 或 false |
1 或 0 |
| 字符串 | 首先去除首尾的空白字符,如果保留下来的是一个空字符串,那么结果就为 0;否则,从字符串中读取数值,读取无效返回 NaN。 |
例子:
alert( Number(" 123 ") ); // 123alert( Number("123z") ); // NaN 由于“z”的存在,无法将字符串转换为有效的数值alert( Number(true) ); // 1alert( Number(false) ); // 0
需要注意的是,null 和 undefined 在这里表现不一致:null 变成 0,而 undefiend 变成 NaN。
转换为布尔值
布尔值转换是最简单的了。
发生在逻辑操作中(稍后我们将遇到条件检查和其他类似的检查),但也可以调用 Boolean(value) 函数执行转换。
转换规则:
- 直觉上是“空”的值,像
0,空字符串,null,undefiend和NaN都变成false。 - 其他值都是
true。
例如:
alert( Boolean(1) ); // truealert( Boolean(0) ); // falsealert( Boolean("hello") ); // truealert( Boolean("") ); // false
⚠️请注意:字符串
"0"也是true一些语言(比如 PHP)会把
"0"看作false。但在 JavaScript 中,任何非空的字符串都是true。
alert( Boolean("0") ); // truealert( Boolean(" ") ); // 空格也是 true(所以非空字符串都是)
总结
有三种最广泛使用的类型转换:字符串、数字和布尔值。
转换成字符串:当我们需要展示某个值,或者用 String(value) 函数操作某个值的时候,会发生到字符串值的转换。通常来说,原始值到字符串的转换是显而易见的。
转换成数值:发生在算术运算中,或者用 Number(value) 函数操作的时候。
到数值的转换规则如下:
| 值 | 转换成…… |
|---|---|
undefiend |
NaN |
null |
0 |
true/false |
1 / 0 |
| 字符串 | 首先去除首尾的空白字符,如果保留下来的是一个空字符串,那么结果就是 0;否则,从字符串中读取数值,读取无效返回 NaN。 |
转换为布尔值:发生在逻辑运算中,或者用 Boolean(value) 函数操作的时候。
到布尔值的转换规则如下:
| 值 | 转换成…… |
|---|---|
0,null,undefined,NaN,"" |
false |
| 其他值 | true |
这些规则中的大多数都很容易理解和记忆。容易犯错的地方是:
undefined转换成数值是 NaN,不是0。"0"和仅仅包含空格的字符串(像" ")转换成布尔值的结果为true。
在我们学习了更多关于 JavaScript 的基本知识之后,会在《对象到原始值转换》一章中介绍对象的转换规则。
(完)
📄 文档信息
🕘 更新时间:2021/09/23
🔗 原文链接:https://javascript.info/type-conversions
🤟 特别感谢:@tys1998(tys1998)
