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) }