零基础学JavaScript
上QQ阅读APP看书,第一时间看更新

2.4 数据类型的转换

JavaScript支持字符串型、数字型和布尔型等数据类型,当需要在这些数据类型之间进行运算时,就必须将不同的数据类型转换为相同的数据类型。

2.4.1 隐式类型转换

JavaScript是一种无类型(notype)的语言,这种“无类型”并不是指JavaScript没有数据类型,而是指JavaScript是一种松散类型、动态类型的语言。因此,在JavaScript中定义一个变量时,不需要指定变量的数据类型,这就使得JavaScript可以很方便灵活地进行隐式类型转换。

所谓隐式类型转换,就是不需要程序员定义,JavaScript会自动将某一个类型的数据转换成另一个类型的数据。JavaScript隐式类型转换的规则是:将当前数据类型转换成当前环境中应该使用的数据类型。例如,在布尔环境中,可以将数字转换成布尔值。请看以下代码:


if (1)
{
  document.write("ok");
}

在以上代码中,数字1会自动转换成布尔值true。事实上,不但是数字1,只要是不等于0的数字,JavaScript都可以将其转换成布尔值true。同样在字符串环境中,可以将布尔值转换成字符串。请看以下代码:


document.write(true);

在以上代码中,由于write()方法输出的是字符串,所以JavaScript会自动将布尔值true转换成字符串"true"。JavaScript中可以做隐式类型转换的情况如下所示。

■数字类型:在字符串环境下可以隐式转换为"数字";在布尔环境中可以隐式转换为true(如果数字为0,则隐式转换为false)。

■非空字符串:在数字环境下可以隐式转换为字符串中数字(如字符串"123"可以转换为数字123)或NaN(如字符串"abc"隐式转换为数字则会返回NaN);在布尔环境下可以隐式转换为true。

■空字符串:在数字环境下可以隐式转换为0;在布尔环境下可以隐式转换为false。

■字符串"true":在数字环境下可以隐式转换为1;在布尔环境下可以隐式转换为true。

■字符串"false":在数字环境下可以隐式转换为0;在布尔环境下可以隐式转换为false。

■null:在字符串环境下可以隐式转换为"null";在数字环境下可以隐式转换为0;在布尔环境下可以隐式转换为false。

■NaN:在字符串环境下可以隐式转换为"NaN";在布尔环境下可以隐式转换为false。

■undefined:在字符串环境下可以隐式转换为"undefined";在数字环境下可以隐式转换为NaN;在布尔环境下可以隐式转换为false。

■true:字符串环境下可以隐式转换为"true";在数字环境下可以隐式转换为1。

■false:字符串环境下可以隐式转换为"false";在数字环境下可以隐式转换为0。

2.4.2 显式类型转换

在JavaScript中除了可以隐式转换数据类型之外,还可以显式转换数据类型。显式转换数据类型,可以增强代码的可读性。显式类型转换的方法有以下两种。

1. 将对象转换成字符串

JavaScript中的很多对象都有toString()方法,使用该方法可以将对象直接转换成字符串。例如以下代码:


var arr = ["JavaScript","VBScript","Script"];
document.write(arr.toString());

以上代码会将数组转换成字符串并输出,输出结果如下所示:


JavaScript,VBScript,Script

除了数组对象之外,还有Date对象、Error对象、Number对象和function函数等,它们都可以使用toString()方法来将对象转换成字符串。

注意

对象不能直接转换成数字型,如果要将对象转换成数字型数据,可以先将其转换成字符型数据,再将字符型数据转换成数字型数据。

2. 基本数据类型转换

在JavaScript中可以使用Number()、Boolean()和String()函数来将数据转换成数字型、布尔型和字符串型,请看以下代码:


var s = "1"
var i = Number(s) + 2;
document.write(i);

以上代码的输出结果为3。在以上代码中,Number(s)的作用是将字符1转换为数字1。Boolean()与String()函数的使用方法与Number()函数的使用方法类似,在此就不再赘述了。除了使用Number()、Boolean()和String()函数来显式转换类型之外,还可以使用以下3种基本数据类型的转换方式。

(1)数字型转换成字符串型,可以将数字型数据与一个空字符串相连。以下代码可以将数字型数据转换成字符串数据:


var s = 123 + "";
var str = "" + 123;

(2)字符串型转换成数字型,可以让字符串型数据减0。以下代码可以将字符串型数据转换成数字型数据:


var s = "123";
var sa = s - 0;

(3)字符串型或数字型转换成布尔型,可以对它们连续使用两次“!”运算符。以下代码可以将字符串或数字数据转换成布尔型数据:


var s = "true";
if (!!s)
{
  document.write(s)
}
var i = 1;
if (!!i)
{
  document.write(i)
}