我希望这三个表达式的求值结果相同,但是最后一个抛出错误,我也不知道为什么:
const a = [1,3,2];
const b = [1,0,3,0,0,2];
console.log(a.map((...args) => b.indexOf(...args)))
console.log(a.map(x => b.indexOf(x)))
console.log(a.map(b.indexOf))
Browser error:
TypeError: can't convert undefined to object
at indexOf
at map
Node error:
TypeError: Array.prototype.indexOf called on null or undefined
at indexOf
at map
我注意到这与调用Array.prototype.indexOf.call(null, 'foo')
时发生的错误相同,因此在a.map(b.indexOf)
中,this
必须设置为null
或undefined
indexOf
。但为什么?是否不应该像前两个表达式一样将其设置为b
?发生什么事了?