首页 热点资讯 义务教育 高等教育 出国留学 考研考公

JS parseInt()函数

发布网友 发布时间:2022-04-26 16:03

我来回答

5个回答

懂视网 时间:2022-05-15 13:43

手写parseInt的实现:要求简单一些,把字符串型的数字转化为真正的数字即可,但不能使用JS原生的字符串转数字的API,比如Number()本文主要给大家介绍了关于JS实现手写parseInt的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

示例代码

function _parseInt(str, radix) {
 let str_type = typeof str;
 let res = 0;
 if (str_type !== 'string' && str_type !== 'number') {
 // 如果类型不是 string 或 number 类型返回NaN
 return NaN
 }

 // 字符串处理
 str = String(str).trim().split('.')[0]
 let length = str.length;
 if (!length) {
 // 如果为空则返回 NaN
 return NaN
 }

 if (!radix) {
 // 如果 radix 为0 null undefined
 // 则转化为 10
 radix = 10;
 }
 if (typeof radix !== 'number' || radix < 2 || radix > 36) {
 return NaN
 }

 for (let i = 0; i < length; i++) {
 let arr = str.split('').reverse().join('');
 res += Math.floor(arr[i]) * Math.pow(radix, i)
 }

 return res;
}

热心网友 时间:2022-05-15 10:51

那是在IE上才会出现的问题,具体是哪个版本的IE来我忘了,当调用parseInt()时,他会先把字符串变成几进制(具体几进制,我忘了)然后在转换成数字,对于纯数字的字符串建议用Number()

下面是从网上找的
首页 > 学习笔记 > parseInt()方法在IE9中的差异性
parseInt()方法在IE9中的差异性
对于parseInt()方法,ECMAScript中有这样一条规范请大家一定要注意: ECMAScript规范指出,如果一个字符串以“0”开头(而不是“0x”或“0X”开头),parseInt()可能把它解释为一个八进制数或者一个十进制数。由于这一行为是不确定的,所以不应该使用parseInt()去解析用0开头的数字,除非显示的指定所使用的基数。
请看代码:
parseInt("050");
这句代码在 IE678、火狐、Opera、Safari、Chrome中,均被作为八进制进行解析,所以最终会被解析为40。
而在IE9下,是作为十进制来处理的,所以最终的解析结果是50。

另外,猜猜下面的代码运行结果都是什么:

parseInt("0.12");//0
parseInt(".12");//NaN
parseInt("0050");//IE9: 50, IE678+标准浏览器: 40
parseInt("-0050");//IE9: -50, IE678+标准浏览器: -40
parseInt("078");//IE9: 78, IE678+标准浏览器: 7
parseInt("08");//IE9: 8, IE678+标准浏览器: 0
parseFloat("0xFF"); //255

总结:
如果你真想用parseInt()来解析数字的话,一定要指定第二个参数(基数),这样是最安全的。因为大多数情况下你所解析的数字都是用户输入的,而用户输入080这种东西,我想,很多验证程序都是放过的。所以用parseInt()解析就有可能出现逻辑错误。所以务必要指定基数。
例如: parseInt("050", 10); //这里指定被解析数字的基数是十进制。避免了各种浏览器解析不一致的问题。

热心网友 时间:2022-05-15 12:09

var a = parseInt("2 001");

遇到非数字,停止转换

追问我没有空格呀

追答那你就是别的非数字字符嘛

热心网友 时间:2022-05-15 13:44

变量中是不是还存在其他非数字字符?

热心网友 时间:2022-05-15 15:35

你直接粘贴你的JS代码!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com