Array.map中parseInt陷阱

Array.map中parseInt陷阱

  • map、parseInt、forEach
["1","2","3"].map(parseInt).forEach(console.log);
//输出结果为:
1 0 [ 1, NaN, NaN ]
NaN 1 [ 1, NaN, NaN ]
NaN 2 [ 1, NaN, NaN ]

解释

  • 先改造map部分为下面代码:
var m=["1","2","3"].map(parseInt)
console.log(m);
//输出结果为:
[ 1, NaN, NaN ]

这里为什么是[1,NaN,NaN]?

  • parseInt的语法:
parseInt (string , radix) 

其中第一个参数是 要转换的字符串,第二个参数是进制(默认为0,标识10进制)。
现在来看下面代码:

var m=["1","2","3"].map(parseInt)
console.log(m);
//等价于
var m=["1","2","3"].map((value,index)=>{
    return parseInt(value,index);
})
console.log(m);

其中 parseInt 会被执行3次,分别是

  • parseInt("1",0) 第二个参数是0,正常可以按照十进制把字符串"1",变为值类型1,
  • parseInt("2",1) 第二个参数是1,目前还没有所谓的一进制,参数不合法,无法正常把"2" 转化类型
  • parseInt("3",2) 第二个参数是2,目前2倒是合法进制参数,但是在二进制中,没有3这个数,二进制中只有0,1;所以还是不合法
  • 最终结果就成了[1,NaN,NaN]

forEach(console.log)

此处forEach传递三个参数(value,index,arr).

加强练习

下列输出结果?

["1","2","11"].map(parseInt).forEach(console.log);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容