Javascript數組Array的forEach擴展方法 forEach是最經常使用到的數組擴展方法之一,至關於參數化循環數組,它簡單的在數組的每個元素上應用傳入的函數,這也意味着只有存在的元素會被訪問和處理。css
若是咱們用console.log替換處理函數,將能夠獲得另外的有趣結果: [1,2,3,"csser"].forEach(console.log);數組
結果: 瀏覽器
1, 0, Array[1, 2, 3, "csser"]函數
2, 1, Array[1, 2, 3, "csser"]this
3, 2, Array[1, 2, 3, "csser"]spa
csser, 3, Array[1, 2, 3, "csser"]code
這裏forEach函數每次調用console.log時會傳入3個參數。顯而易見,這3個參數分別是:當前項、當前項索引和數組自己,對象
forEach是一個基本的數組高階(higher-order)方法,其語法定義爲: array.forEach(callback[, thisObject]) 第一個參數咱們已經知道了,它是一個擁有3個參數的函數,該函數將應用於數組的每一項。blog
而第二個參數表示上下文對象(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。