.slice.call与.push在javascript中

Car*_*los 2 javascript arrays

我的一个朋友[].slice.call()用来填充匹配元素的数组.

我想知道这是如何工作的.我只知道Array.prototype.push要填充数组.

我也看到两种技术填充阵列都有所不同.

所以我的问题是:

  • 如何Array.prototype.slice帮助填充阵列?
  • 什么是角色Array.prototype.sliceArray.prototype.push做出对象和数组?

小提琴

var arr=[];
var arr=[].slice.call($('[id^=name]'));
//arr.push($('[id^=name]'))
console.log(arr)
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 6

所述.slice()阵列的方法返回一个浅拷贝的阵列的一部分的.它是作为Array原型的一个方法编写的,因此它操作的数组就是在其上下文中调用它的数组.通常情况是这样的:

var newArray = oldArray.slice(2, 4);
Run Code Online (Sandbox Code Playgroud)

使用时调用.slice()方法.call(),可以this显式控制值.在你朋友的代码中,他传递一个jQuery对象作为this值.因为没有其他参数,所以完整地.slice()返回jQuery对象的浅表副本,作为新数组.(像其他类似的方法一样,.slice()可以处理任何看起来像数组的东西:基本上,任何具有.length属性和数字索引属性的东西.一个jQuery对象符合该描述.)

但是,由于jQuery已经有一个内置方法来返回所有匹配元素的普通数组,所以你的朋友不应该再这样做了:

var plainArray = $('[id^=name]').get();
Run Code Online (Sandbox Code Playgroud)

这完全是一回事.使用.slice()并没有,但它有点毫无意义.