在indexOf中使用速记语法时发生意外行为

时间:2019-06-25 13:01:25

标签: javascript ecmascript-6 this undefined prototype

我希望这三个表达式的求值结果相同,但是最后一个抛出错误,我也不知道为什么:

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必须设置为nullundefined indexOf。但为什么?是否不应该像前两个表达式一样将其设置为b?发生什么事了?

0 个答案:

没有答案