@@ -145,14 +145,34 @@ ES6提供简洁写法,允许直接通过现有数组生成新数组,这被
145
145
``` javascript
146
146
147
147
var a1 = [1 , 2 , 3 , 4 ];
148
- var a2 = [i * 2 for (i of a1)];
148
+ var a2 = [for (i of a1) i * 2 ];
149
149
150
150
a2 // [2, 4, 6, 8]
151
151
152
152
```
153
153
154
154
上面代码表示,通过for...of结构,数组a2直接在a1的基础上生成。
155
155
156
+ 注意,数组推导中,for...of结构总是写在最前面,返回的表达式写在最后面。
157
+
158
+ for...of后面还可以附加if语句,用来设定循环的限制条件。
159
+
160
+ ``` javascript
161
+
162
+ var years = [ 1954 , 1974 , 1990 , 2006 , 2010 , 2014 ];
163
+
164
+ [for (year of years) if (year > 2000 ) year];
165
+ // [ 2006, 2010, 2014 ]
166
+
167
+ [for (year of years) if (year > 2000 ) if (year < 2010 ) year];
168
+ // [ 2006]
169
+
170
+ [for (year of years) if (year > 2000 && year < 2010 ) year];
171
+ // [ 2006]
172
+
173
+ ```
174
+ 上面代码表明,if语句写在for...of与返回的表达式之间,可以使用多个if语句。
175
+
156
176
数组推导可以替代map和filter方法。
157
177
158
178
``` javascript
@@ -161,23 +181,23 @@ a2 // [2, 4, 6, 8]
161
181
// 等价于
162
182
[1 , 2 , 3 ].map (function (i ) { return i * i });
163
183
164
- [i for (i of [1 ,4 ,2 ,3 ,- 8 ]) if (i < 3 )];
184
+ [for (i of [1 ,4 ,2 ,3 ,- 8 ]) if (i < 3 ) i ];
165
185
// 等价于
166
186
[1 ,4 ,2 ,3 ,- 8 ].filter (function (i ) { return i < 3 });
167
187
168
188
```
169
189
170
190
上面代码说明,模拟map功能只要单纯的for...of循环就行了,模拟filter功能除了for...of循环,还必须加上if语句。
171
191
172
- 新引入的for...of结构,可以直接跟在表达式的前面或后面,甚至可以在一个数组推导中,使用多个for ...of结构。
192
+ 在一个数组推导中,还可以使用多个for ...of结构,构成多重循环 。
173
193
174
194
``` javascript
175
195
176
196
var a1 = [" x1" , " y1" ];
177
197
var a2 = [" x2" , " y2" ];
178
198
var a3 = [" x3" , " y3" ];
179
199
180
- [( console . log (s + w + r)) for (s of a1) for (w of a2) for (r of a3)];
200
+ [for (s of a1) for (w of a2) for (r of a3) console . log (s + w + r )];
181
201
// x1x2x3
182
202
// x1x2y3
183
203
// x1y2x3
@@ -197,9 +217,9 @@ var a3 = ["x3", "y3"];
197
217
198
218
``` javascript
199
219
200
- [c for (c of ' abcde' ) if (/ [aeiou] / .test (c))].join (' ' ) // 'ae'
220
+ [for (c of ' abcde' ) if (/ [aeiou] / .test (c)) c ].join (' ' ) // 'ae'
201
221
202
- [c + ' 0 ' for (c of ' abcde' )].join (' ' ) // 'a0b0c0d0e0'
222
+ [for (c of ' abcde' ) c + ' 0 ' ].join (' ' ) // 'a0b0c0d0e0'
203
223
204
224
```
205
225
@@ -211,4 +231,4 @@ var a3 = ["x3", "y3"];
211
231
212
232
这两个方法用于监听(取消监听)数组的变化,指定回调函数。
213
233
214
- 它们的用法与Object.observe和Object.unobserve方法完全一致,请参阅《对象的扩展》一章。唯一的区别是,对象可监听的变化一共有六种,而数组只有四种:add、update、delete、splice(数组的length属性发生变化)。
234
+ 它们的用法与Object.observe和Object.unobserve方法完全一致,也属于ES7的一部分, 请参阅《对象的扩展》一章。唯一的区别是,对象可监听的变化一共有六种,而数组只有四种:add、update、delete、splice(数组的length属性发生变化)。
0 commit comments