2023 年 1 月 24 日

类型转换

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

例如,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 10
字符串 从开头和结尾删除空格(包括空格、制表符 \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

请注意,nullundefined 在此处的行为不同:null 变为零,而 undefined 变为 NaN

大多数数学运算符也会执行此类转换,我们将在下一章中看到。

布尔转换

布尔转换是最简单的转换。

它发生在逻辑运算中(稍后我们会遇到条件测试和其他类似的东西),但也可以通过调用 Boolean(value) 来显式执行。

转换规则

  • 直观上“空”的值,如 0、空字符串、nullundefinedNaN,变为 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) 执行。

遵循以下规则

变为…
0nullundefinedNaN"" false
任何其他值 true

这些规则中的大多数都很容易理解和记忆。人们通常会犯错误的显着例外是

  • undefined 作为数字是 NaN,而不是 0
  • "0" 和仅包含空格的字符串(如 " ")作为布尔值是 true。

这里没有涉及对象。在学习了有关 JavaScript 的更多基础知识后,我们将在本章后面的 对象到原始值转换 中重新讨论它们,该部分专门针对对象。

教程地图

评论

在评论之前阅读此内容…
  • 如果您有改进建议 - 请 提交 GitHub 问题 或提交拉取请求,而不是发表评论。
  • 如果您无法理解文章中的部分内容,请详细说明。
  • 要插入几行代码,请使用 <code> 标签,对于多行代码,请将其包装在 <pre> 标签中,对于 10 行以上的代码,请使用沙盒 (plnkrjsbincodepen……)