把其他数据类型转换为Number
Number([val])
+ 一般用于浏览器的隐式转换中
@1 数学运算
@2 isNaN检测
@3 ==比较
...
+ 规则:
@1 字符串转换为数字:空字符串变为0,如果出现任何非有效数字字符,结果都是NaN
@2 把布尔转换为数字:true->1 false->0
@3 null->0 undefined->NaN
@4 Symbol无法转换为数字,会报错:Uncaught TypeError: Cannot convert a Symbol value to a number
@5 BigInt去除“n”(超过安全数字的,会按照科学计数法处理)
@6 把对象转换为数字:
+ 先调用对象的 Symbol.toPrimitive 这个方法,如果不存在这个方法
+ 再调用对象的 valueOf 获取原始值,如果获取的值不是原始值
+ 再调用对象的 toString 把其变为字符串
+ 最后再把字符串基于Number方法转换为数字
parseInt([val],[radix]) parseFloat([val])
+ 一般用于手动转换
+ 规则:[val]值必须是一个字符串,如果不是则先转换为字符串;然后从字符串左侧第一个字符开始找,把找到的有效数字字符最后转换为数字「一个都没找到就是NaN」;遇到一个非有效数字字符,不论后面是否还有有效数字字符,都不再查找了;parseFloat可以多识别一个小数点;
练习题:
let arr = [27.2, 0, '0013', '14px', 123];
arr = arr.map(parseInt);
把其他数据类型转换为String
转化规则:
@1 拿字符串包起来
@2 特殊:Object.prototype.toString
出现情况:
@1 String([val]) 或者 [val].toString()
@2 “+”除数学运算,还可能代表的字符串拼接
+ 有两边,一边是字符串
+ 有两边,一边是对象
+ 只出现在左边
+ ...
...
练习题:
let result = 100 + true + 21.2 + null + undefined + "Tencent" + [] + null + 9 + false;
console.log(result);
// parseInt的处理规则和Number完全不一致
/* console.log(parseInt('10')); //10
console.log(Number('10')); //10
console.log(parseInt('10px')); //10
console.log(Number('10px')); //NaN
console.log(parseInt(null)); //parseInt('null') NaN
console.log(Number(null)); //0 */