JS拾遗篇之parseInt
发布日期:2022-02-22 16:04:50 浏览次数:27 分类:技术文章

本文共 2355 字,大约阅读时间需要 7 分钟。

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) =>15parseInt('021',8)//17
  • 注意第一个参数的类型:参数不是字符串时,会调用toString() 转换。
parseInt("FXX123", 16); // parseInt("F", 16); 15parseInt("7*6", 10); // 7parseInt("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<2parseInt('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.14parseInt({
toString: function() {
return "3.14" } });//3

参考文献:

转载地址:https://blog.csdn.net/Conradine_Lian/article/details/115483550 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:CSS预处理器
下一篇:网络安全之XSS & CSRF

发表评论

最新留言

不错!
[***.144.177.141]2024年04月04日 18时33分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

微信公众号介绍_以及注册订阅号---微信公众号开发工作笔记0001 2019-04-26
Vue模板语法---vue工作笔记0003 2019-04-26
Vue计算属性之基本使用---vue工作笔记0004 2019-04-26
Vue监视---vue工作笔记0005 2019-04-26
Vue条件渲染---vue工作笔记0008 2019-04-26
Vue事件处理_vue的事件处理超级方便_功能强大---vue工作笔记0011 2019-04-26
Vue表单数据自动收集---vue工作笔记0012 2019-04-26
Vue生命周期---vue工作笔记0013 2019-04-26
ES6-ES11新特性_ECMAScript_简单介绍---JavaScript_ECMAScript工作笔记001 2019-04-26
ES6-ES11新特性_ECMAScript相关名词介绍_---JavaScript_ECMAScript工作笔记002 2019-04-26
ES6新特性_let变量声明以及声明特性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记003 2019-04-26
Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001 2019-04-26
Sharding-Sphere,Sharding-JDBC_分库分表介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记002 2019-04-26
C++_类和对象_对象特性_构造函数的分类以及调用---C++语言工作笔记041 2019-04-26
C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042 2019-04-26
C++_类和对象_对象特性_构造函数调用规则---C++语言工作笔记043 2019-04-26
C++_类和对象_对象特性_深拷贝与浅拷贝---C++语言工作笔记044 2019-04-26
AndroidStudio_java.util.ConcurrentModificationException---Android原生开发工作笔记237 2019-04-26
AndroidStudio_android中实现对properties文件的读写操作_不把properties文件放在assets文件夹中_支持读写---Android原生开发工作笔记238 2019-04-26
弹框没反应使用Looper解决_the caller should invoke Looper.prepare() and Looper.loop()---Android原生开发工作笔记239 2019-04-26