调用空数组上的reduce会抛出TypeError
,这是完全可以理解的并且有助于捕获错误。但是当我在一个内部有一个项目的数组上调用它时,这种行为会让我感到困惑:
var arr = ["a"];
arr.reduce(function(a,b){
return [a,b]
}); //returns "a"
我知道reduce并不意味着在这样的数组上使用,但我发现只返回元素而不调用回调或抛出错误至少是奇怪的。
此外,MDN文档指出回调是“对数组中的每个值执行的函数,带有四个参数:”。
有人可以解释这种行为背后的原因吗?
答案 0 :(得分:11)
回调应该是一个“二元函数”(即需要两个参数进行操作的函数,加上另外两个包含currentIndex
和原始array
的参数。) p>
如果只提供了一个元素,则会将未定义的值传递给currentValue
或previousValue
的回调,从而可能导致运行时错误。
因此设计假定只给出一个值(无论是空数组,initialValue
,还是具有一个值而不是initialValue
的数组),最好不要在以下位置调用回调:所有