面试问题:['1 ',' 2 ',' 3']。map (Parseint)输出什么?

故事是这样的。前几天上班路上,像往常一样拿起手机看头条,逛知乎,刷掘金。

在这个过程中,我看到了下面这个面试问题:

其实这个问题很简单,就像[0,1,2]一样。filter(Boolean),但我不能马上给出答案。

我知道parseInt()的第二个参数与十进制数有关。但是,由于第二个参数通常是默认参数,所以在编写项目时也会启用ESLint的radix规则。但是在启用规则的情况下,10几乎是作为一个参数来填充的,因为很少有涉及其他小数的情况。...

因此,熟悉函数parseInt(string,radix)是有好处的。

回到上面的主题,分解它就是返回下面三个运算结果的数组:

对于parseInt()函数,只收到两个参数,所以第三个参数实际上没有影响,所以['1 ',' 2 ',' 3']的结果。map (parseint)是:

但本文的重点并不是答案。我们应该注意parseInt(string,radix)函数本身。

如果经常使用ESLint,应该知道它有一个radix和parseInt()相关的规则。

举个例子。它们分别打印什么结果?

我为什么要写57?这是个错误吗?显然,在浏览器中,parseInt('071 ')打印出的是71!

不用担心,我们知道严格模式下不允许使用以0开头的八进制语法。

但你可能不知道的是,我想,在ES6标准发布之前,ECMAScript是没有八进制语法的。至于像071这样的八进制记数法,只被所有浏览器厂商支持。就像Object.prototype一样. __proto__从来不是ECMAScript的标准语法,但是所有浏览器都支持。标准语法是Object.getPrototypeOf()。

回到parseInt(string,radix)和八进制的话题,

本着求真的态度,我拿出古器物验证,得到结果:IE8及以下版本parseInt('071 ')的打印结果是57(下),而IE9及以上版本是71。

随着JavaScript的快速发展,浏览器厂商已经接近标准,不再一意孤行。至于浏览器parseInt('071 '),打印结果是71,因为当前浏览器JS引擎是基于10进行解析的。

虽然是2022年,但还是兼容老(古)浏览器,所以需要明确指定radix参数。本节使用一个典型案例来说明在使用parseInt函数时应该指定radix参数。

在JavaScript中,有四种表示十进制数的语法:

分析字符串并返回指定基数的十进制整数或NaN。

不过注意,并不是所有的字母都以NaN开头。例如Parseint ('A11 ',12)的返回值是1453。因为超过十进制数后,也可能用字母来表示对应的十进制数。

所以在使用parseInt处理BigInt类型时,最终返回值始终是Number类型(在处理过程中精度会丢失),BigInt类型的尾部N会被丢弃。

原因很简单,前面提到过。当parseInt的第一个参数不是字符串类型时,会调用BigInt.prototype.toString()的方法先将其转换成字符串,即1024n.toString(),结果是1024。

回到文章开头的话题:

这时候能不能快点说出答案:【1,楠,楠】。

我趁机彻底了解了parseInt()的方法,心满意足地离开了。