1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
---
title: Map.prototype.forEach()
slug: Web/JavaScript/Reference/Global_Objects/Map/forEach
tags:
- ECMAScript 2015
- JavaScript
- Map
- Method
- Prototype
- Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach
original_slug: Web/JavaScript/Reference/Global_Objects/Map/forEach
browser-compat: javascript.builtins.Map.forEach
---
<div>{{JSRef}}</div>
<p><code><strong>forEach()</strong></code> 方法按照插入顺序依次对 <code>Map</code> 中每个键/值对执行一次给定的函数</p>
<div>{{EmbedInteractiveExample("pages/js/map-prototype-foreach.html")}}</div>
<h2 id="语法">语法</h2>
<pre class="syntaxbox"><code><var>myMap</var>.forEach(<var>callback([<var>value</var>][,<var>key</var>][,<var>map</var>])[, <var>thisArg</var>])</var></code></pre>
<h3 id="参数">参数</h3>
<dl>
<dt><code><var>callback</var></code></dt>
<dd>
<p><code><var>myMap</var></code> 中每个元素所要执行的函数。它具有如下的参数</p>
<dl>
<dt><code><var>value</var></code> {{Optional_Inline}}</dt>
<dd>每个迭代的值。</dd>
<dt><code><var>key</var></code> {{Optional_Inline}}</dt>
<dd>每个迭代的键。</dd>
<dt><code><var>map</var></code> {{Optional_Inline}}</dt>
<dd>被迭代的map(上文语法框中的 <code><var>myMap</var></code>)。</dd>
</dl>
</dd>
<dt><code><var>thisArg</var></code> {{Optional_Inline}}</dt>
<dd>在 <code><var>callback</var></code> 执行中使用的 <code>this</code> 的值。</dd>
</dl>
<h3 id="返回值">返回值</h3>
<p>{{jsxref("undefined")}}.</p>
<h2 id="描述">描述</h2>
<p><code>forEach</code> 方法会对map中每个真实存在的键执行一次给定的 <code><var>callback</var></code> 函数。它不会对被删除的键执行函数。然而,它会对每个值为 <code>undefined</code> 的键执行函数。</p>
<p><code><var>callback</var></code> 接收<strong>三个参数</strong>:</p>
<ul>
<li>当前的 <code><var>value</var></code></li>
<li>当前的 <code><var>key</var></code></li>
<li>正在被遍历的 <strong><code>Map</code> 对象</strong></li>
</ul>
<p>如果 <code>forEach</code> 中含有 <code><var>thisArg</var></code> 参数,那么每次 <code><var>callback</var></code> 被调用时,都会被用作 <code>this</code> 的值。否则,<code>undefined</code> 将会被用作 <code>this</code> 的值。按照<a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">函数观察到 <code>this</code> 的常用规则</a>,<code><var>callback</var></code> 函数最终可观察到 <code>this</code> 值。</p>
<p>每个值只被访问一次,除非它被删除了或者在 <code>forEach</code> 结束前被改变了。<code><var>callback</var></code> 不会对在被访问前就删除的元素执行。在 <code>forEach</code> 结束前被添加的元素将会被访问。</p>
<p><code>forEach</code> 会对 <code>Map</code> 对象中的每个元素执行一次 <code><var>callback</var></code>。它不会返回值。</p>
<h2 id="示例">示例</h2>
<h3 id="输出一个_Map_对象中的内容">输出一个 <code>Map</code> 对象中的内容</h3>
<p>以下的代码在每行中打印一个 <code>Map</code> 对象中的元素</p>
<pre class="brush:js">function logMapElements(value, key, map) {
console.log(`map.get('${key}') = ${value}`)
}
new Map([['foo', 3], ['bar', {}], ['baz', undefined]]).forEach(logMapElements)
// logs:
// "map.get('foo') = 3"
// "map.get('bar') = [object Object]"
// "map.get('baz') = undefined"
</pre>
<h2 id="规范">规范</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">规范</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('ESDraft', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容">浏览器兼容</h2>
<p>{{Compat("javascript.builtins.Map.forEach")}}</p>
<h2 id="参见">参见</h2>
<ul>
<li>{{jsxref("Array.prototype.forEach()")}}</li>
<li>{{jsxref("Set.prototype.forEach()")}}</li>
</ul>
|