强制类型转换:
parseInt(str, radix)
parseFloat(str, radix)
通常将字符串解析为数字(Int–整数,Float–小数),有一定的容错能力,能够将非兼容字符前的部分转换为数字
- - str 待转换解析的字符串。当地一个字符就是非兼容数字时,得到NaN(Not A Number)
- - radix 基数(进制),可选,默认为10进制
Number(param)
将其他类型转换为数字,没有容错能力,非兼容格式的内容转换为NaN
- - param 待转换的值
在条件判断时,除了 undefined, null, false, NaN, ‘’, 0, -0,其他所有值都转为 true,包括所有对象。
对象在转换类型的时候,会调用内置的 [[ToPrimitive]] 函数,对于该函数来说,算法逻辑一般来说如下:
当然你也可以重写 Symbol.toPrimitive ,该方法在转原始类型时调用优先级最高。
let a = {
valueof() {
return 0
},
toString() {
return '1'
},
[Symbol.toPrimitive]() {
return 2
}
}
console.log(1 + a) // 3
加法运算符不同于其他几个运算符,它有以下几个特点:
1 + '1' // '11'
true + true // 2
4 + [1,2,3] // "41,2,3"
解析:
另外对于加法还需要注意这个表达式 ‘a’ + + ‘b’
'a' + + 'b' // -> "aNaN"
因为 + ‘b’ 等于 NaN,所以结果为 “aNaN”,你可能也会在一些代码中看到过 + ‘1’ 的形式来快速获取 number 类型。
那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字
4 * '3' // 12
4 * [] // 0
4 * [1, 2] // NaN
let a = {
valueOf() {
return 0
},
toString() {
return '1'
}
}
a > -1 // true
在以上代码中,因为 a 是对象,所以会通过 valueOf 转换为原始类型再比较值。