在写算法的时候遇到一个字符串转整数的问题,让我陷入了沉思,发现js 在把字符串转换成整数的过程中有“坑”(所有的坑都是基础知识不扎实惹的祸)。
比如:
‘s’ 转换成整数是什么?
‘1e1’转换成整数是什么?
‘100’ 转换成整数是什么?
有人马上就能给出答案,直接使用 + 或者 parseInt:
console.log(+'s'); // NaN
console.log(+'1e1'); // 10
console.log(+'100'); // 100
console.log(parseInt('s')); // NaN
console.log(parseInt('1e1', 10)); // 1
console.log(parseInt('100')); // 100
细心的你应该注意到了,字符串’1e1′ 使用 + 和parseInt 转换后的结果并不一致,而且我们期望结果应该是 NaN,但是结果并不是js字符串转化为数字,这让人很崩溃。我们再看一个例子:
console.log(parseInt('6s1')); // 6
console.log(+'6s1'); // NaN
console.log(+'6e1'); // 60
从这两个例子我们得到一个规律,parseInt在把字符串转换成整数时,把首次出现的数字转换成整数,非数字的字符忽略。而 + 把字符串转换成整数时只与字符 e 有关系,如果把 e 换成大写的 E,结果是一样的。
看到 e,你一定能想到科学计数法js字符串转化为数字,如下:
console.log(+'1e1'); // 10 = 1
console.log(+'1e2'); // 100 = 1 * 10*10
console.log(+'2e2'); // 100 = 2 * 10*10
所以 + 转换整数时,人家考虑到了科学计数法。
如何自己实现一个忽略科学计数法的转换方法呢?有时候只是字符 e,并不是科学计数法中的 e。
要求只要字符串中包含非0-9 的字符都返回 NaN,否则返回对应的数字。
function syParseInt(str) {
if (str !== Number(str).toString()) {
return NaN;
}
return +str;
}
console.log(syParseInt('s')); // NaN
console.log(syParseInt('1e1', 10)); // NaN
console.log(syParseInt('100')); // 100
console.log(syParseInt('6s1')); // NaN
大家加油!
长按关注
素燕《前端小课》
帮助 10W 人入门并进阶前端
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。