JS拾遗篇之parseInt

parseInt 基础语法

parseInt(string[, radix]); //将 radix进制的string转换为10进制数返回。
  • string:要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用 toString )。字符串开头的空白符将会被忽略。
  • radix(可选):从 2 到 36,表示字符串解析时的基数。例如指定 16 表示被解析值是十六进制数。请注意,10不是默认值!

返回值为NaN的情况:

  1. radix<2
  2. radix>36
  3. 第一个非空格字符不能转换为数字

radix 是undefined,0,或未指定 时

  1. string以 0x 或 0X开头,radix是16进制
  2. string以 0 开头,radix被假定为8(八进制)或10(十进制)
  3. string 以任何其他值开头,radix是10进制

如果 parseInt 遇到的字符不是指定 radix 参数中的数字,它将忽略该字符以及所有后续字符,并返回到该点为止已解析的整数值。 parseInt 将数字截断为整数值。 允许前导和尾随空格。 ——MDN

Number.prototype.toString

语法:numObj.toString([radix])
  • 参数:指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10
  • 如果 toString() 的 radix 参数不在 2 到 36 之间,将会抛出一个 RangeError

Number 对象覆盖了 Object 对象上的 toString() 方法,它不是继承的 Object.prototype.toString()。
对于 Number 对象,toString() 方法以指定的基数返回该对象的字符串表示。

parseInt 进制转换

parseInt(021,8) //15   将八进制的17转换成十进制
// 以0开头被认为是8进制 021.toString()// 2*8 + 1 = 17 	parseInt('17',8) =>15
parseInt('021',8)//17
  • 注意第一个参数的类型:参数不是字符串时,会调用toString() 转换。
parseInt("FXX123", 16); // parseInt("F", 16); 15
parseInt("7*6", 10); // 7
parseInt("546", 2); //NaN  除了“0、1”外,其它数字都不是有效二进制数字
parseInt("231", 3); //2
// 3进制只能是0-2 ,有效数字只有2 ,将3进制的2转换为10进制:2*30 = 2
  • parseInt 检查字符串中的字符是否合法. 一旦遇到一个在指定进制中不合法的字符后,立即停止解析并且忽略后面所有的字符。* 就是不合法的数字字符。

  • 从字符串左边开始查找。找到有效数字字符转换为数字,遇到一个非有效的数字字符,则停止查找。

parseInt(0.00000000000434, 10); //4  非常小的数值变成4
//0.00000000000434 =》4.34e-12;  0.00000000000434.toString() =》"4.34e-12"
parseInt("0.00000000000434", 10); // 0
  • parseInt 不支持小数。

parseInt 结合 map

map接受两个参数,一个callback,一个this

  • callback回调函数接收三个参数,一个currentValue,index,array;
  • this,即调用函数时this指向

题目:

["1", "2", "3"].map(parseInt) // (3)[1,NaN,NaN]

解析:

parseInt('1', 0); //1  radix是十进制 
parseInt('2', 1);// NaN 	radix<2
parseInt('3', 2);//NaN  3不是2进制数,2进制只有01

parseInt 结合 replace

replace() 回调函数的四个参数:
1、匹配项 1,2,3
2、与模式中的子表达式匹配的字符串
3、出现的位置 0,2,4
4、stringObject 本身 。
如果没有与子表达式匹配的项,第二参数为出现的位置.所以第一个参数是匹配项,第二个参数是位置

题目:

"1 2 3".replace(/\d/g, parseInt)  //"1 NaN 3" 

解析:

 parseInt('1', 0)
 parseInt('2', 2)  //2进制中不可能有2
 parseInt('3', 4) // 将4进制的3转换成10进制返回

parseInt VS parseFloat

  • 都是用来将string从左到右查找有效数字将其 转换为number
  • 都可以解析 BigInt 为 Numbers, 丢失精度。因为末位 n 字符被丢弃。
  • 都可以可以转换一个已经定义了 toString 或者 valueOf 方法的对象
  • parseFloat() 只接受一个参数;parseInt 支持进制基数 radix
  • parseInt 不支持小数,parseFloat多识别一个小数点,如果有两个小数点,第二个小数点将被看作无效的
parseFloat({ toString: function() { return "3.14" } });//3.14
parseInt({ toString: function() { return "3.14" } });//3

参考文献: parseInt | MDN

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值