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的情况:
- radix<2
- radix>36
- 第一个非空格字符不能转换为数字
radix 是undefined,0,或未指定 时
- string以 0x 或 0X开头,radix是16进制
- string以 0 开头,radix被假定为8(八进制)或10(十进制)
- 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.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
C++_类和对象_对象特性_构造函数的分类以及调用---C++语言工作笔记041
2019-04-26
C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042
2019-04-26
C++_类和对象_对象特性_构造函数调用规则---C++语言工作笔记043
2019-04-26
C++_类和对象_对象特性_深拷贝与浅拷贝---C++语言工作笔记044
2019-04-26