aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/map/foreach/index.html
blob: 50b701e5412d944bb2460a1417e5988da39d286f (plain)
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>