apply()方法的另一種使用,就是可以代替一次for循環
在封裝 document.getElementsByTagName的時候,需要把偽數組轉為一個真的數組,其是也不是真的數組 typeof 出來是object,
看代碼:
直接使用push
/**
* 根據標簽名稱獲取元素
* @param tagName 標簽名稱
* @returns DOM 偽數組
*/
function getTags(tagName){
var result=[];
result[0] = "myDiv"; // 為了更好的方便看打印結果,沒有實際的意義
result.push(document.getElementsByTagName(tagName));
console.log(result);
return result;
}
var divs = getTags("div");
顯然不是我們想要的結果
for循環方式
/**
* 根據標簽名稱獲取元素
* @param tagName 標簽名稱
* @returns DOM 偽數組
*/
function getTags(tagName){
var result=[];
var divs = document.getElementsByTagName(tagName);
for(var i=0,len = divs.length;i<len;i++){
console.log(divs[i]); // 打印出每一個div
result.push(divs[i]);
}
console.log(typeof result); // object
console.log(result);
return result;
}
var divs = getTags("div");
用apply()方式
/**
* 根據標簽名稱獲取元素
* @param tagName 標簽名稱
* @returns DOM 偽數組
*/
function getTags(tagName){
var result=[];
result.push.apply(result,document.getElementsByTagName(tagName));
console.log(typeof result); // object
console.log(result);
return result;
}
var divs = getTags("div");
用兩個真數組來測試看簡單多了
var arr1 = [1,2,3];
var arr2 = [4,5,6];
// 合並兩個數組
// 方法1- for循環
// for(var i =0,len = arr2.length;i<len;i++){
// arr1.push(arr2[i]);
// }
// console.log(arr1); // [1, 2, 3, 4, 5, 6];
// apply()方法
arr1.push.apply(arr1,arr2);
console.log(arr1); // [1, 2, 3, 4, 5, 6];