2.5.4 组合数值和字符串

大多数算术操作符仅对数值有意义。例如,把2和字符串'eggs'相乘没有任何意义。如果尝试这个例子,最终将得到一个特殊的JavaScript值NaN,它表示“不是一个数值”。然而,有的时候,我们可能想要把一个字符串和数值组合起来。例如,假设我们想要在Web页面上显示一条消息,指出访问者已经访问Web站点多少次。他访问的次数是一个数值,但是,这条消息是一个字符串。在这种情况下,我们使用+操作符来做两件事情:把一个数值转换为一个字符串,并且将它和另一个字符串组合起来。下面是一个例子:


var numOfVisits=101;

var message='You have visited this site'+numOfVisits+'times.’;


在这个例子中,message包含了字符串“You have visited this site 101 times”。JavaScript解释器认出了这其中包含了一个字符串,因此,它意识到,这不是要做任何数学运算(不是加法)。相反,它把+当做连接操作符,并且同时意识到这个数值也应该转换为一个字符串。

这个例子似乎是在同一条消息里显示文字和数值的一种好方法。在这个例子中,数值显然是组成完整句子的一连串字母的一部分,并且,无论何时对一个字符串值和一个数值使用+操作符,JavaScript解释器都会把数值转换为一个字符串。

这种功能叫做自动类型转换,然而,它可能会引发问题。例如,如果访问者在表单上通过输入数值(例如2)来回答一个问题(“你想要多少双鞋”),输入值被当做一个字符串’2’。那么,你会遇到这样一种情况:


var numOfShoes=’2’;

var numOfSocks=4;

var totalItems=numOfShoes+numOfSocks;


我们期待totalItems中存储的结果是6(两双鞋+4双袜子)。相反,由于numOfShoes中的值是一个字符串,JavaScript解释器把变量numOfSocks中的值也转换为一个字符串,并且,我们最终在变量totalItems中得到了字符串’24’。有几种方法可以防止这种错误:

首先,把+添加到包含数值的字符串的开始,例如:


var numOfShoes=’2’;

var numOfSocks=4;

var totalItems=+numOfShoes+numOfSocks;


在一个变量的前面添加+符号(确保变量和+符号之间没有空格),这就告诉JavaScript解释器尝试把字符串转换为数值,如果字符串像’2’一样只包含数值,我们最终把这个字符串转换成了一个数值。在这个例子中,我们最终得到6(2+4)。另一种技术是使用Number()命令,如下所示:


var numOfShoes=’2’;

var numOfSocks=4;

var totalItems=Number(numOfShoes)+numOfSocks;


Number()在可能的情况下把一个字符串转换为数值(如果字符串只是字母且不是数值,我们会得到一个NaN值,表示不能把字母转换为一个数值)。

通常,在获取页面访问者的输入时最常遇到作为字符串的数值,例如,获取访问者输入一个表单字段中的值。因此,如果你需要使用一个表单的输入或访问者输入的其他信息来做加法运算,确保首先对它使用Number()命令。

注意:只有在将一个数值和包含数值的一个字符串相加的时候,才会发生这个问题。如果你试图将变量numOfShoes和包含数值的一个变量(例如,shoePrice)相乘,JavaScript解释器将会把numOfShoes中的字符串转换为一个数值,然后将其与变量shoePrice相乘。