介绍
在 JavaScript 中, 数据类型 用于对一种特定类型的数据进行分类,确定可以分配给该类型的值以及可以对其执行的操作。
虽然由于 type coercion,JavaScript 会自动转换许多值,但通常最好的做法是在类型之间手动转换值以达到预期的结果。
本教程将指导您转换 JavaScript 的原始数据类型,包括数字、字符串和布尔值。
隐式转换
作为一种编程语言,JavaScript 非常容忍意外值。 因此,JavaScript 将尝试转换意外的值,而不是直接拒绝它们。 这种隐式转换称为类型强制。
有些方法会自动转换值以便使用它们。 alert() 方法 以字符串为参数,但它会自动将其他类型转换为字符串。 因此,我们可以将一个数值传递给该方法:
alert(8.5);
如果我们运行上面的行,浏览器将返回一个弹出警告对话框,显示 8.5
值,但它已被转换为字符串以便执行此操作。
当使用可以通过 数学运算符 计算为数字的字符串时,您会发现 JavaScript 能够通过将字符串隐式转换为数字来处理值,如下面的示例所示。
// Subtraction "15" - "10";
Output5
// Modulo "15" % "10";
Output5
但是,并非每个操作员都能按预期工作。 +
运算符有明显的问题,因为它可以表示加法或 字符串连接 。
// When working with strings, + stands for concatenation "2" + "3";
Output"23"
由于 +
运算符是多用途的,因此 2
和 3
的字符串值尽管是数字字符串,但会连接到 23
的字符串值而不是加在一起成为数字 5
。
因为歧义可能存在并且有时会导致意想不到的结果,所以通常最好在代码中尽可能显式地转换数据类型。 这将有助于管理来自用户的输入和处理错误。
将值转换为字符串
可以通过调用 String()
或 n.toString()
将值显式转换为字符串。
使用 String()
函数,让我们通过将值 true
传递给 String()
的参数,将 布尔值 转换为字符串。
String(true);
当我们这样做时,将返回字符串文字 "true"
。
Output"true"
或者,我们可以将一个数字传递给函数。
String(49);
将返回该数字的字符串文字。
Output"49"
让我们使用带有变量的 String()
函数。 我们将为变量 odyssey
分配一个数值,然后使用 typeof
运算符检查类型。
let odyssey = 2001; console.log(typeof odyssey);
Outputnumber
此时,变量odyssey
被赋值为2001
的数值,我们已经确认它是一个数字。
现在,让我们将 odyssey
重新分配给它的等效字符串,然后使用 typeof
确认我们已经成功地将变量的值从数字转换为字符串。
odyssey = String(odyssey); // "2001" console.log(typeof odyssey);
Outputstring
在上面的示例中,我们已经确认 odyssey
在数据类型转换之后被重新分配为等效于字符串值。
我们可以以类似的方式使用 n.toString()
。 我们可以将 n
替换为一个变量:
let blows = 400; blows.toString();
变量 blows
将作为字符串返回。
Output"400"
或者,我们可以将一个值放在括号内,而不是用 n.toString()
放置一个变量:
(1776).toString(); // returns "1776" (false).toString(); // returns "false" (100 + 200).toString(); // returns "300"
通过使用 String()
或 n.toString()
,我们能够显式地将布尔值或 数字数据类型 的值转换为字符串值,以确保我们的代码行为符合我们的预期。
将值转换为数字
将值转换为数字数据类型时,我们将使用 Number()
方法。 首先,我们将数字文本字符串转换为数字,但我们也可以转换布尔值。
我们可以将一个数字字符串传递给 Number()
方法:
Number("1984");
该字符串将被转换为数字并且不再包含在引号内。
Output1984
我们还可以将字符串分配给变量,然后对其进行转换。
let dalmatians = "101"; Number(dalmatians);
Output101
字符串文字 "101"
通过其变量转换为数字 101
。
空白字符串或空字符串将转换为 0
。
Number(" "); // returns 0 Number(""); // returns 0
请注意,非数字字符串将转换为 NaN
,它代表 Not a N 数字。 这包括用空格分隔的数字。
Number("twelve"); // returns NaN Number("20,000"); // returns NaN Number("2 3"); // returns NaN Number("11-11-11"); // returns NaN
对于布尔数据类型,false
的计算结果为 0
,true
的计算结果为 1
。
Number(false); // returns 0 Number(true); // returns 1
Number()
方法将非数字数据类型转换为数字。
将值转换为布尔值
要将数字或字符串转换为布尔值,请使用 Boolean()
方法。 例如,这对于确定用户是否在文本字段中输入数据很有用。
任何被解释为空的值,例如数字 0
、空字符串或未定义的值或 NaN
或 null
都将转换为 false
.
Boolean(0); // returns false Boolean(""); // returns false Boolean(undefined); // returns false Boolean(NaN); // returns false Boolean(null); // returns false
其他值将转换为 true
,包括由空格组成的字符串文字。
Boolean(2000); // returns true Boolean(" "); // returns true Boolean("Maniacs"); // returns true
请注意, "0"
作为字符串文字将转换为 true
因为它是一个非空字符串值:
Boolean("0"); // returns true
将数字和字符串转换为布尔值可以让我们在二进制项内评估数据,并且可以在我们的程序中用于控制流。
结论
本教程介绍了 JavaScript 如何处理其原始数据类型的转换。 尽管由于类型强制,在很多情况下数据类型会隐式转换,但显式转换数据类型以确保程序按预期运行是一个好习惯。
要了解有关 JavaScript 数据类型的更多信息,请阅读“了解 JavaScript 中的数据类型”。 要了解如何在其他编程语言中完成数据类型转换,请查看“如何在 Python 3 中转换数据类型”。