forEach 方法 (Array)
为数组中的每个元素执行指定操作。
语法
array1.forEach(callbackfn[, thisArg])
参数
参数 | 定义 |
---|---|
array1 | 必要参数。一个数组对象。 |
callbackfn | 必要参数。最多可以接受三个参数的函数。对于数组中的每个元素,forEach都会调用callbackfn函数一次。 |
thisArg | 可选参数。callbackfn函数中的this关键字可引用的对象。如果省略thisArg,则undefined将作用this值。 |
异常
如果callbackfn参数不是函数对象,则将引发TypeError异常。
备注
对于数组中出现的每个元素,forEach方法都会调用callbackfn函数一次(采用升序索引顺序)。将不会为数组中缺少的元素调用回调函数。
除了数组对象之外,forEach方法可由具有length属性且具有按数字编制索引的属性名的任何对象使用。
回调函数语法
回调函数的语法如下所示:
function callbackfn(value, index, array1)
你可使用最多三个参数来声明回调函数。
回调函数的参数如下所示。
回调函数参数 | 定义 |
---|---|
value | 数组元素的值。 |
index | 数组元素的数字索引。 |
array1 | 包含该元素的数组对象。 |
修改数组对象
forEach方法不直接修改原始数组,但回调函数可能会修改它。下表描述了在forEach方法启动后修改数组对象所获得的结果。
forEach方法启动后的条件 | 元素是否传递给回调函数? |
---|---|
在数组的原始长度之外添加元素。 | 否。 |
添加元素以填充数组中缺少的元素。 | 是,如果该索引尚未传递给回调函数。 |
元素已更改。 | 是,如果该元素尚未传递给回调函数。 |
从数组中删除元素。 | 否,除非该元素已传递给回调函数。 |
示例
下面的示例演示了forEach方法的用法。
// Define the callback function. function ShowResults(value, index, ar) { document.write("value: " + value); document.write(" index: " + index); document.write("<br />"); } // Create an array. var letters = ['ab', 'cd', 'ef']; // Call the ShowResults callback function for each // array element. letters.forEach(ShowResults); // Output: // value: ab index: 0 // value: cd index: 1 // value: ef index: 2
示例
在下面的示例中,callbackfn参数包含回调函数的代码。
// Create an array. var numbers = [10, 11, 12]; // Call the addNumber callback function for each array element. var sum = 0; numbers.forEach( function addNumber(value) { sum += value; } ); document.write(sum); // Output: 33
示例
下面的示例演示了thisArg参数的用法,该参数指定可以对其引用this关键字的对象。
// Define the object that contains the callback function. var obj = { showResults: function(value, index) { // Call calcSquare by using the this value. var squared = this.calcSquare(value); document.write("value: " + value); document.write(" index: " + index); document.write(" squared: " + squared); document.write("<br />"); }, calcSquare: function(x) { return x * x } }; // Define an array. var numbers = [5, 6]; // Call the showResults callback function for each array element. // The obj is the this value within the // callback function. numbers.forEach(obj.showResults, obj); // Embed the callback function in the forEach statement. // The obj argument is the this value within the obj object. // The output is the same as for the previous statement. numbers.forEach(function(value, index) { this.showResults(value, index) }, obj); // Output: // value: 5 index: 0 squared: 25 // value: 6 index: 1 squared: 36 // value: 5 index: 0 squared: 25 // value: 6 index: 1 squared: 36
必备条件
在以下文档模式中受支持:Internet Explorer 9标准模式、Internet Explorer 10标准模式、Internet Explorer 11标准模式。应用商店应用(Windows 8和Windows Phone 8.1)中也受支持。请参阅版本信息。
在以下文档模式中不受支持:怪异模式、Internet Explorer 6 标准模式、Internet Explorer 7 标准模式、Internet Explorer 8 标准模式。