js 1.7中还包含一个数组推导(array comprehension)的特性,如果不在最后介绍它好像显得不怎么完整。
数组推导其实很简单:
let a = [x*x for(x in range(0,10)) if(x%2===0)];
以上代码中的range()返回一个生成器对象。上述代码等价于:
let a = [];
for(x in range(0,10)){
if(x%2 === 0)
a.push(x*x);
}
在js 1.8中,将数组推导中的方括号变为圆括号,就变成一个生成器表达式。该表达式的返回值是一个生成器对象,而不是数组。可数组推导相比,使用生成器表达式的好处是可以惰性求值(lazy evaluation),这种特性可以应用于潜在的无穷序列。不过使用生成器表达式不像数组可以随机存取,生成器没有索引,为了得到第n个值,必须遍历之前的n-1个值。
var a = [0,1,2,3,4,5,6,7,8,9,10];
var c = (x for(x in a) if(x%2 == 0));
for(i in c)
console.log(i);