数据类型相互转换-转为数字
2022-04-17 本文已影响0人
maomizone
Number([val])
- 一般用于浏览器的隐式转换中
@1 数学运算
@2 isNaN检测
@3 ==比较
... - 规则
@1 字符串转数字:空串变为0,如果出现任何非有效数字字符,结果为NaN:Number('12px')->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])
- 一般用于手动转换
- 规则:
@1 [val]值必须是字符串,如果不是先转换为字符串,基于方法String([val]),这个方法遇到对象可以参考上方的对象转数字@6,只是最后一步没有
@2 [radix]进制
- 如果不写,或者写0:默认是10(特殊情况:如果字符串以0x开始的,默认值是16)
- 有效范围2-36(如果不在这个区间,直接返回NaN)
@3 从[val]字符串左侧第一个字符开始查找,查找出符合[radix]进制的值(遇到不符合的就结束查找),把找到的内容,按照[radix]进制转换为10进制
console.log(parseInt('10102px13', 2)); // 10
// 找到符合二进制的'1010'
// 二进制转十进制:按权展开求和
// 1*2^3 + 0*2^2 + 1**2^1 + 0*2^0 = 10
console.log(parseInt(0013, 2)); // 3
// js遇到以0开头的数字,会默认把其按照8进制转为10进制,然后再进行其他的操作
// 0013先8转10 0*8^3 + 0*8^2 + 1*8^1 + 3*8^0 = 11
// parseInt('11', 2)
// 二进制转十进制:按权展开求和
// 1*2^1 + 1*2^0 = 3
Snipaste_2022-04-17_00-33-57.png