TypeError:无法将undefined转换为object - 没有undefined或object

时间:2017-01-28 11:38:44

标签: javascript

考虑代码

const arr = [];
[1].map(arr.push)

这给了TypeError: can't convert undefined to object(至少在Firefox上),但几乎是同义代码

const arr = [];
[1].map(v => arr.push(v))

工作正常。

正如Thomas Babington Macaulay在他对Erasmus作品的评论中所写,"什么是......?"

1 个答案:

答案 0 :(得分:2)

那是因为arr.push只是对未绑定到arr的通用函数的引用。

因此,当作为回调调用时,它不知道你要推送哪个数组

var func = [].push;
func(123); // TypeError: can't convert undefined to object

这样可行,但多个参数将传递给push,您可能不想要

const arr = [];
[1, "a"].map(arr.push.bind(arr)); // [ 3, 6 ]
arr; /* [  1,  0, [1, "a"],
         "a",  1, [1, "a"]  ] */

所以只需使用您的[1].map(v => arr.push(v))

即可