在写算法的时候遇到一个字符串转整数的问题,让我陷入了沉思,发现js 在把字符串转换成整数的过程中有“坑”(所有的坑都是基础知识不扎实惹的祸)。

比如:

's' 转换成整数是什么?

'1e1'转换成整数是什么?

'100' 转换成整数是什么?

有人马上就能给出答案,直接使用 + 或者 :

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' 使用 + 和 转换后的结果并不一致字符串转换为整数,而且我们期望结果应该是 NaN,但是结果并不是,这让人很崩溃。我们再看一个例子:

console.log(parseInt('6s1')); // 6
console.log(+'6s1'); // NaN
console.log(+'6e1'); // 60

从这两个例子我们得到一个规律,在把字符串转换成整数时,把首次出现的数字转换成整数,非数字的字符忽略。而 + 把字符串转换成整数时只与字符 e 有关系,如果把 e 换成大写的 E,结果是一样的。

看到 e,你一定能想到科学计数法,如下:

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

大家加油!

串字符整数转换为数字_串字符整数转换为小数_字符串转换为整数

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注