大多数情况,运算符和函数会自动把一个值转换成正确的类型。这称为“类型转换”。
例如,alert 函数自动将值转换为字符串展示。算术运算符则自动将值转换为数值。
当然也有需要我们显式将一个值转换成期待类型的场景。
⚠️暂时不讨论对象
在这一章中,我们还没有涉及到对象,先学习原始值。稍后在我们学习对象之后,会在《对象到原始值转换》一章学习对象的转换规则。
转换为字符串
字符串转换发生在期待字符串值的场景。
例如,alert(value)
就会将值转换成字符串形式后展示。
我们也可以通过调用 String(value)
函数来实现这个目的:
let value = true;
alert(typeof value); // boolean
value = String(value); // 现在值变为字符串 "true"
alert(typeof value); // string
字符串转换规则非常明显。false
变成 "false"
,null
变成 "null"
等。
转换为数值
在数学函数和表达式中会自动发生数值转换。
例如,当 /
在非数字值上使用时:
alert( "6" / "2" ); // 3, 字符串被转为数值
我们可以使用 Number(value)
函数将参数显式转换成数值:
let str = "123";
alert(typeof str); // string
let num = Number(str); // 变成数值 123
alert(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 ") ); // 123
alert( Number("123z") ); // NaN 由于“z”的存在,无法将字符串转换为有效的数值
alert( Number(true) ); // 1
alert( Number(false) ); // 0
需要注意的是,null
和 undefined
在这里表现不一致:null
变成 0
,而 undefiend
变成 NaN
。
转换为布尔值
布尔值转换是最简单的了。
发生在逻辑操作中(稍后我们将遇到条件检查和其他类似的检查),但也可以调用 Boolean(value)
函数执行转换。
转换规则:
- 直觉上是“空”的值,像
0
,空字符串,null
,undefiend
和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(" ") ); // 空格也是 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)