这是第一个:
(function() {
return ['10','10','10','10'].map(parseInt);
})();
输出: [10, NaN, 2, 3]
第二个:
(function() {
return 9999999999999999;
})();
输出: 10000000000000000
我想问下是什么原因造成的?求教
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
parseInt(string, radix)array.map的callback是function (element, index)你相当于依次调用了
真的要用的话,
bind一下,或者['10','10','10','10'].map(str => parseInt(str))。第一个问题大家都已经回答的很好了,我来试着回答一下第二个问题。
在 MDN 上有很好的解释,我搬来说下。在 JS 的
Number中有一个MAX_SAFE_INTEGER的静态属性,用来表示可以进行正常数学运算的数值的上限。该值是253 - 1,即:9007199254740991。当超过这个这个值时就会出现不符合正常数学运算的错误,如:
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2。你也可以把这种情况理解为溢出了。其本质原因是由于 JS 使用了 IEEE754 中的双精度浮点数来表示数字,所有使用这种表示方法的语言都会出现上面的问题,不只是 JS。
第一个的map用法我不是很清楚,但是第二个是由于JavaScript的整型数据范围造成的错误,当javascript的整型数据超过9007199254740992了之后,不管是对于数据在内存的存储方式还是运算,都会造成溢出或其他的错误异常。
说下第一个,
Array的map方法是返回三个参数的(详情见 Array.prototype.map()):然后再来看看
parseInt这个方法,这个方法是可以接受两个参数的,第一个就是要你要解析成整数的字符串,第二个参数则是指定转换中采用的基数(可忽略)。然后这段代码:
虽然只是把字符串转为整数,由于传入了第二个参数(
index)而变成这样:因为
parseInt方法可以接受两个参数,就用map方法的前两个参数,所以结果不是我们预期想的那样。