大多数情况下,运算符和函数会自动将赋予它们的值转换为正确的类型。

比如,alert 会自动将任何值都转换为字符串以进行显示。
算术运算符会将值转换为数字。

在某些情况下,我们需要将值显式地转换为我们期望的类型。

本节不涉及对象,我们会在 对象 — 原始值转换 一章中学习对象 — 原始值转换。

字符串转换

alert(value) 将 value 转换为字符串类型,然后显示这个值。
String(value) 显式地将 value 转换为字符串类型:

  1. let value = true;
  2. alert(typeof value); // boolean
  3. value = String(value); // 现在,值是一个字符串形式的 "true"
  4. alert(typeof value); // string

该方法会使false 变成 “false”,null 变成 “null”

数字型转换

算术函数表达式中,会自动进行 number 类型转换。
当把除法 / 用于非 number 类型:

  1. alert( "6" / "2" ); // 3, string 类型的值被自动转换成 number 类型后进行计算

我们也可以使用 Number(value) 显式地将这个 value 转换为 number 类型。

  1. let str = "123";
  2. alert(typeof str); // string
  3. let num = Number(str); // 变成 number 类型 123
  4. alert(typeof num); // number

如果该字符串不是一个有效的数字,转换的结果会是 NaN。

  1. let age = Number("an arbitrary string instead of a number");
  2. alert(age); // NaN,转换失败
变成……
undefined NaN
null 0
true 和 false 1 and 0
string 去掉首尾空格后的纯数字字符串中含有的数字。如果剩余字符串为空,则转换结果为 0。否则,将会从剩余字符串中“读取”数字。当类型转换出现 error 时返回 NaN。

例子:

  1. alert( Number(" 123 ") ); // 123
  2. alert( Number(" ") ); // 0
  3. alert( Number("") ); // 0
  4. alert( Number("123z") ); // NaN(从字符串“读取”数字,读到 "z" 时出现错误)
  5. alert( Number(true) ); // 1
  6. alert( Number(false) ); // 0

请注意 null 和 undefined 在这有点不同:null 变成数字 0,undefined 变成 NaN。

布尔型转换

布尔(boolean)类型转换是最简单的一个。
它发生在逻辑运算中(条件判断和其他类似的东西),但是也可以通过调用 Boolean(value) 显式地进行转换。

转换规则如下:

  • 直观上为“空”的值(如 0、空字符串、null、undefined 和 NaN)将变为 false。
  • 其他值变成 true。

比如:

  1. alert( Boolean(1) ); // true
  2. alert( Boolean(0) ); // false
  3. alert( Boolean("hello") ); // true
  4. alert( Boolean("") ); // false
  5. alert( Boolean("0") ); // true
  6. alert( Boolean(" ") ); // 空白,也是 true(任何非空字符串都是 true)

请注意:包含 0 的字符串 “0” 是 true

总结

有三种常用的类型转换:转换为 string 类型、转换为 number 类型和转换为 boolean 类型。

字符串转换 —— 转换发生在输出内容的时候,也可以通过 String(value) 进行显式转换。原始类型值的 string 类型转换通常是很明显的。
数字型转换 —— 转换发生在进行算术操作时,也可以通过 Number(value) 进行显式转换。
数字型转换遵循以下规则:

变成……
undefined NaN
null 0
true / false 1 / 0
string “按原样读取”字符串,两端的空白会被忽略。空字符串变成 0。转换出错则输出 NaN。

布尔型转换 —— 转换发生在进行逻辑操作时,也可以通过 Boolean(value) 进行显式转换。
布尔型转换遵循以下规则:

变成……
0, null, undefined, NaN, “” false
其他值 true

上述的大多数规则都容易理解和记忆。人们通常会犯错误的值得注意的例子有以下几个:

  • 对 undefined 进行数字型转换时,输出结果为 NaN,而非 0。
  • 对 “0” 和只有空格的字符串(比如:” “)进行布尔型转换时,输出结果为 true。