JavaScript 是一种动态数据类型语言。变量是没有类型的,可以随机被赋予任意类型的值。而数据本身和各种运算是有类型的,例如在做数学运算时我们就需要数据是 number 类型,但有时候实际参与数学运算的数据并不全是 number 类型,因此在进行某些运算时数据是需要转换类型的。大多数情况下,这种数据类型转换是自动的,但是有时也需要手动强制转换。
显示转换
显示转换,即通过调用一些函数方法进行强制转换。JavaScript 提供了以下几种转型函数:
- 转换为数值类型:
parseInt()
、parseFloat()
、Number()
- 转换为字符串类型:
toString()
、String()
- 转换为布尔值类型:
Boolean()
转换为数值类型
parseInt()
该方法用于解析一个字符串,并返回一个 number 类型的整数。解析规则如下:
- 忽略字符串前面的空格,直至找到第一个非空字符;
- 如果第一个字符是 0,则忽略;
- 如果第一个字符不是数字或者正负号,返回
NaN
; - 如果第一个字符是数字,则继续解析直到字符串解析完毕或者遇到一个非数字字符为止;
- 如果是以 0x 开头,则将其当作十六进制来解析;
|
|
parseFloat()
该方法用于解析一个字符串,并返回一个 number 类型的浮点数(小数)。解析规则与parseInt()
基本相同,但也有点区别:
- 解析到的第一个小数点
.
符号是有效的; - 如果字符串包含一个可解析为整数的数,则返回整数值而不是浮点数值;
|
|
parseInt()
和parseFloat()
的解析规则可以简单的理解为:从左往右依次解析,结果保留前面合法的,裁剪去后面不合法的。如果第一个就不合法,结果则为NaN
。
Number()
该方法用于解析任意类型数据,并返回一个有效的 number 类型的值。解析规则如下:
数据类型 | 解析规则 |
---|---|
布尔值 | 1. true 转换为 12. false 转换为 0 |
null | 转换为 0 |
undefined | 转换为NaN |
字符串 | 1. 空字符串"" 转换为 02. 如果引号内整体为一个有效数字,则转换为对应的数字 3. 其他情况都转换为 NaN |
|
|
转换为字符串类型
toString()
该方法用于解析除了 undefined 和 null 以外的任意类型数据,并返回一个 string 类型的值。
|
|
String()
该方法用于解析任意类型数据,并返回一个 string 类型的值。
|
|
转换为布尔值类型
Boolean()
该方法用于解析任意类型数据,并返回一个 boolean 类型的值。解析规则如下:
false
null
undefined
0
NaN
""
除了以上六种数据转换结果为false
外,其他所有数据转换结果都为true
。
|
|
隐式转换
在 JavaScript 中很多操作都会存在数据自动转换的情况。即当参与操作的数据并不是预期的类型时,程序会对数据进行隐式转换。
注意:隐式转换是得到一个转换后的新数据,不会改变原数据。
以下列举几种常见的隐式转换的情况:
转换为数字类型
进行算术运算
当对数据进行数学运算操作(加减乘除等)时,如果参与运算的数据不是 number 类型,则会将数据隐式的调用Number()
方法转为数字后再进行运算。
|
|
小技巧:给任意数据减去数字 0,可快速将当前数据转为 number 类型。
进行大小比较
当对数据进行大小比较时(大于小于等于等)时,如果参与比较的数据不能直接进行比较,则会将数据隐式的调用Number
转为数字后再进行比较。
|
|
isNaN()
isNaN()
方法用于判断数据是否为“非数字”。但是在判断前会先将数据隐式的调用Number()
方法转为数字后再进行判断。如果转换后的数据为“非数字”,则返回结果true
,反之则false
。
|
|
转换为字符串类型
加号+
除了用于数学加法运算外,还可以进行字符串的拼接。因此,当参与+
操作的数据中存在一个 string 类型的值时,其他数据都会隐式的调用String()
方法转换为字符串后进行拼接。
|
|
小技巧:给任意数据拼接一个空字符串,可快速将当前数据转为 string 类型且不改变数据值。
|
|
转换为布尔值类型
当进行逻辑判断时,如果参与判断的数据不是布尔值类型,则会隐式的调用Boolean()
方法转换为布尔值。
|
|