给出一段代码,不知道大家有没有碰到过这样的问题:
let aaa = [1,2,3,4];
aaa.reduce(
(sum,item)=>{ console.log(sum,item); return sum;}
);
上面这段代码的执行没有问题。结果:
0 1
1 2
3 3
6 4
然后,有趣的来了:
把代码改成这样:
let aaa = [1];
aaa.reduce(
(sum,item)=>{ console.log(sum,item);return sum;}
);
你是不是以为会运行一次,至少输出:
0 1
这样?不是的,,结果是什么输出都没有。。。
然后,你再把sum的初始值设置一下:
let aaa = [1];
aaa.reduce(
(sum,item)=>{ console.log(sum,item);return sum;},
0
);
打印又出现了:
0 1
这个坑我调了好久才发现。。不知道大家有没有遇到过一样的情况。目前我还没有试过是JS本身的问题,还是小程序的JS内核解释器的bug。
遇到问题的时候先仔细看下文档,建议看MDN,里面说到了初始值的特殊情况:
如果没有提供
initialValue
,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue
,从索引0开始。