不同类型的数据一起参与运算时,需要进行数据类型转换。JavaScript数据类型转换可以分为自动类型转换和强制类型转换两种。
自动类型转换并不会改变操作数本身的类型,改变的仅仅是这些操作数如何被求值以及表达式本身的类型。
1)其他类型转布尔型
其他类型转换为布尔型时,会被看作false的数据如表2-5所示,其他数据会被视为true。
表2-5 其他类型转布尔型
其中,浮点型0.0后面无论添加多少个0,值均为false;空字符串的值为false,但包含一个空格的非空字符串的值为true。
2)其他类型转数字型
布尔型和数字型进行算术运算时,true会自动转换为1参与运算,false会自动转换为0参与运算。示例如下:
undefined参与算术运算时结果为NaN。示例如下:
null参与算术运算时转换为0。示例如下:
如果运算符为-、*、/、%中的任意一个,JavaScript会自动将字符串转换为数字,对于无法转换的则转换为NaN。示例如下:
3)其他类型转字符串型
如果表达式中存在字符串类型和其他类型数据,而运算符使用“+”,则JavaScript会自动将其他类型转换为字符串,并将两个字符串拼接在一起。示例如下:
强制类型转换可以把一种数据类型强制转为另一种数据类型,JavaScript中强制类型转换可以通过Number()、Boolean()、String()、parseInt()等函数实现,具体内容详见“第4章函数”。示例如下:
上面代码中,prompt()函数的返回值是字符串类型,因此sum1的值是字符串拼接的结果“12”。使用parseInt()函数将字符串转换为数字后,可以得到正确的求和结果。