Skip to content

类型转换

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

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

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

字符串转换

js
String(1.12) // "1.12"

1.12.toString() // "1.12"

1.12 + "" // "1.12"

数字型转换

js
"12" - 1  // 11
"12" * 2  // 23
"12" / 3  // 4
"12" % 4  // 0

Number("12.1")    // 12.1
Number("abc")     // NaN
Number("")        // 0
Number("  ")      // 0
Number(true)      // 1
Number(false)     // 0
Number(null)      // 0
Number(undefined) // NaN

parseInt("12")      // 12
parseFloat("12.1")  // 12.1

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

js
let age = Number("an arbitrary string instead of a number");

alert(age); // NaN,转换失败

number 类型转换规则:

变成……
undefinedNaN
null0
true 和 false1 和 0
string去掉首尾空白字符(空格、换行符 \n、制表符 \t 等)后的纯数字字符串中含有的数字。如果剩余字符串为空,则转换结果为 0。否则,将会从剩余字符串中“读取”数字。当类型转换出现 error 时返回 NaN。

例子:

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

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

布尔型转换

布尔型转换它发生在逻辑运算中,但是也可以通过调用 Boolean(value) 显式地进行转换。

转换规则如下:

  • 直观上为 “空” 的值(如 0、空字符串、nullundefinedNaN)将变为 false
  • 其他值变成 true
js
console.log(Boolean(0));          // false
console.log(Boolean(null));       // false
console.log(Boolean(undefined));  // false
console.log(Boolean(NaN));        // false

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

一些编程语言(比如 PHP)视 "0" 为 false。但在 JavaScript 中,非空的字符串总是 true。

js
alert( Boolean("0") ); // true
alert( Boolean(" ") ); // 空格,也是 true(任何非空字符串都是 true)

基于 MIT 许可发布