ES6新特性总结之迭代器和for-of循环

for-in

我们将 要探究一下 for-of 循环的外表下隐藏着哪些强大的功能。现在,只需记住:

  1. 这是最简洁、最直接的遍历数组元素的语法
  2. 这个方法避开了 for-in 循环的所有缺陷
  3. 与forEach()不同的是,它可以正确响应 break、continue 和 return 语句
  4. for-in 循环用来遍历对象属性。
  5. for-of 循环用来遍历数据—例如数组中的值。

基本用法:

var myArray = ['huang','cheng','du'];
for(var value of myArray){
	console.log(value);
}

遍历集合:

for (var chr of "huangchengdu") {
	console.log(chr);
}
//新建一个map
var map = new Map();
var key1 = {
	toString: function() {
		return 2
	}
};
var key2 = 2;
map.set(key1, "huang");
map.set(key2, "chengdu");
for (var [key, value] of map) {
	console.log(key + " " + value);
}

//遍历对象的属性
object1 = {
	name: "huang",
	age: 27
};
for (var key of Object.keys(object1)) {
	console.log(key + ":" + object1[key]);
}

迭代器

正如其它语言中的 for/foreach 语句一样,for-of 循环语句通过方法调用来遍历各种 集合。数组、Maps 对象、Sets 对象以及其它在我们讨论的对象有一个共同点,它们都有一个迭代器方法。你可以给任意类型的对象添加迭代器方法。当你为对象添加 myObject.toString()方法后,就可以将对象转化为字符串,同样地, 当你向任意对象添加 myObjectSymbol.iterator方法,就可以遍历这个对象了。

所有拥有Symbol.iterator的对象被称为可迭代的。

//因为jQuery对象与数组想死,为jQuery对象添加数组的迭代器方法
jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
Loading Disqus comments...
Table of Contents