TypeError:无法将未定义转换为对象 - 没有未定义或对象
2017-01-28
3191
考虑代码
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) 在对伊拉斯谟作品的评论中所写,“什么......?”
1个回答
这是因为
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))
Oriol
2017-01-28