在写算法的时候遇到一个字符串转整数的问题,让我陷入了沉思,发现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

大家加油!

c 判断字符是否为数字_js中字符转为数字_js字符串转化为数字

长按关注

素燕《前端小课》

帮助 10W 人入门并进阶前端

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688