美文网首页
数据类型相互转换-转为数字

数据类型相互转换-转为数字

作者: maomizone | 来源:发表于2022-04-17 00:31 被阅读0次

    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

    相关文章

      网友评论

          本文标题:数据类型相互转换-转为数字

          本文链接:https://www.haomeiwen.com/subject/exekertx.html