在Javascript中使用单个元素调用Array.reduce

时间:2015-11-24 17:32:30

标签: javascript arrays

调用空数组上的reduce会抛出TypeError,这是完全可以理解的并且有助于捕获错误。但是当我在一个内部有一个项目的数组上调用它时,这种行为会让我感到困惑:

var arr = ["a"];
arr.reduce(function(a,b){
   return [a,b]
}); //returns "a"

我知道reduce并不意味着在这样的数组上使用,但我发现只返回元素而不调用回调或抛出错误至少是奇怪的。

此外,MDN文档指出回调是“对数组中的每个值执行的函数,带有四个参数:”。

有人可以解释这种行为背后的原因吗?

1 个答案:

答案 0 :(得分:11)

回调应该是一个“二元函数”(即需要两个参数进行操作的函数,加上另外两个包含currentIndex和原始array的参数。) p>

如果只提供了一个元素,则会将未定义的值传递给currentValuepreviousValue的回调,从而可能导致运行时错误。

因此设计假定只给出一个值(无论是空数组,initialValue,还是具有一个值而不是initialValue的数组),最好不要在以下位置调用回调:所有