下面两段代码
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [6, 7, 8, 9, 10];
Array.prototype.push.apply(arr1, arr2);
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [6, 7, 8, 9, 10];
[].push.apply(arr1, arr2)
这两种写法得到的结果是相同的,它们有什么区别吗?
下面两段代码
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [6, 7, 8, 9, 10];
Array.prototype.push.apply(arr1, arr2);
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [6, 7, 8, 9, 10];
[].push.apply(arr1, arr2)
这两种写法得到的结果是相同的,它们有什么区别吗?
没什么太大的不同,第二种写法本质上也是调用[].__proto__
也就是Array.prototype
上的push
函数,除了会创建一个数组对象以外没有不同,不过浏览器对这个应该有优化,加上又少写很多字符,很多库中都是用的第二种写法。
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
1 回答5.2k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
3 回答4.3k 阅读✓ 已解决
2 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
理论上
Array.prototype.push
比[].push
要快. 因为[].push
这种方式需要在原型链上查找两次才能捕获到push
方法. 写个bench:在线地址: https://jsfiddle.net/hedyegok/
事实证明是对的,
Array.prototype.push
要稍稍快一点点, 大概10%的样子.