Javascript數組Array的forEach擴展方法 forEach是最常用到的數組擴展方法之一,相當於參數化循環數組,它簡單的在數組的每一個元素上應用傳入的函數,這也意味着只有存在的元素會被訪問和處理。
如果我們用console.log替換處理函數,將可以得到另外的有趣結果: [1,2,3,"csser"].forEach(console.log);
結果:
1, 0, Array[1, 2, 3, "csser"]
2, 1, Array[1, 2, 3, "csser"]
3, 2, Array[1, 2, 3, "csser"]
csser, 3, Array[1, 2, 3, "csser"]
這里forEach函數每次調用console.log時會傳入3個參數。顯而易見,這3個參數分別是:當前項、當前項索引和數組本身,
forEach是一個基本的數組高階(higher-order)方法,其語法定義為: array.forEach(callback[, thisObject]) 第一個參數我們已經知道了,它是一個擁有3個參數的函數,該函數將應用於數組的每一項。
而第二個參數表示上下文對象(context object)或者this值,用於指向回調函數的this引用。這有時會挺有用,比如當我們想使用某個對象的方法作為forEach的處理函數時:
var database = { users: ["CSSer", "John", "David"], sendEmail: function (user) {
if (this.isValidUser(user)) { /* 發送消息 */ } }, isValidUser: function (user) { /* 驗證代碼 */ } }; // 向每個用戶發送郵件 database.users.forEach(database.sendEmail,database);
簡單分析下,在sendMail函數內部的this指向database對象,並且this.isValidUser指向必須的函數,如果我們不傳入第二個參數,this值會被默認指向全局對象(在瀏覽器中是window)或者在strict模式下指向undefined。