- 非数值类型转换为数值类型
有三个函数可以实现:Number()
parseInt()
parseFloat()
Number()函数遵循以下规则:
- true和false分别转换为1和0
- 如果参数是数值则不变
- null转换为0
- undefined 转换为NaN.
- 如果参数是字符串,则按照以下规则:
a. 如果只含数字,或(+-)符号,则转为相应的十进位数值,开头的”0”将被忽略:
1 | > Number('-65') |
b. 如果含有合法的浮点数值,如”1.2345”等,则转为此浮点数,忽略开头的”0”。
1 | > Number('001.2345678') |
c. 如果含有合法的16进位数值,则转换为相应的十进制数值:
1 | > Number('0xffff') |
d. 空字符串转换为0,包括只含空格的字符串:
1 | > Number(' ') |
e. 如果该字符串是其他格式,则返回NaN:
1 | > Number('h') |
- 当参数是对象时,调用对象的valueOf方法并按照上述规则转换,如果结果是
NaN
则调用toString()方法。
parseInt()
将字符串转换为整型,规则为:如果首字符不是数字,+-符合,则返回NaN
。空字符串会被转为NaN
:
1 | > parseInt('') |
如果首字符是数值,+-符号,那么就往下找,直到遇到非数值字符:
1 | > parseInt('+ji') |
parseInt()
还可以接受一个基数参数(radix),表示按照多少进制转换:
1 | > parseInt('ffff', 16) |
parseFloat()
工作方式和parseInt()
类似,它可以接受一个字符串中有一个小数点,第二个小数点将被忽略:
1 | > parseFloat('1.23') |
parseFloat()
只能转换10进制数,不能带基数参数(radix)。
- 非字符串转换为字符串
非字符串可以通过toString()
方法 显示 转换为字符串类型。
1 | > 2.toString() |
toString()
方法在转换数值类型时可以加上radix
参数:
1 | var num = 10; |
null和undefined没有toString()方法。这时我们可以使用String()函数:
1 | > String(null) |
- 转换成布尔值
使用Boolean方法,可以将任意类型的变量转为布尔值。以下六个值的转化结果为false,其他的值全部为true。
- undefined
- null
- -0
- +0
- NaN
- ‘’(空字符串)
1 | Boolean(undefined) // false |
请注意,空对象{}和空数组[]都会被转成true。
1 | Boolean([]) // true |
所有对象的布尔值都是true,甚至连false对应的布尔对象也是true。
1 | Boolean(new Boolean(false)) |