類陣列轉換為陣列實現
基礎知識:
- Array 是陣列類;
- slice(start,end)是此類中的方法;
- 類中呼叫slice()方法,應該是Array.prototype.slice(start,end);
call([thisObj[,arg1[arg2[[argN]]]]])
params:
thisObj是一個物件的方法
arrg1~argN是引數
複製程式碼
實現原理: Array.prototype.slice.call(argument);能將length屬性的物件,轉化為陣列,除了IE下的節點集合;因為IE下的dom物件是以com物件的形式實現的,JS物件和com物件不能進行轉換;
var a={length:2,0:'first',1:'second'};//類陣列,有length屬性,長度為2,第0個是first,第1個是second
console.log(Array.prototype.slice.call(a,0));// ["first", "second"],呼叫陣列的slice(0);
var a={length:2,0:'first',1:'second'};
console.log(Array.prototype.slice.call(a,1));//["second"],呼叫陣列的slice(1);
var a={0:'first',1:'second'};//去掉length屬性,返回一個空陣列
console.log(Array.prototype.slice.call(a,0));//[]
function test(){
console.log(Array.prototype.slice.call(arguments,0));//["a", "b", "c"],slice(0)
console.log(Array.prototype.slice.call(arguments,1));//["b", "c"],slice(1)
}
test("a","b","c");
複製程式碼
將引數轉換為陣列的方式:
- Array.from(arrayLike);
- Array.prototype.slice.call(arguments);
- [].slice.call(arguments,0);
- function ArrayTransfer(...args){ var args=[]; for(var i=0;i<arguments.length;i++){ args.push(arguments[i]); } }