如何在JavaScript中转换数据类型

来自菜鸟教程
跳转至:导航、​搜索

介绍

在 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"

由于 + 运算符是多用途的,因此 23 的字符串值尽管是数字字符串,但会连接到 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 的计算结果为 0true 的计算结果为 1

Number(false);       // returns 0
Number(true);       // returns 1

Number() 方法将非数字数据类型转换为数字。

将值转换为布尔值

要将数字或字符串转换为布尔值,请使用 Boolean() 方法。 例如,这对于确定用户是否在文本字段中输入数据很有用。

任何被解释为空的值,例如数字 0、空字符串或未定义的值或 NaNnull 都将转换为 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 中转换数据类型”。