[ES6深度解析]2:迭代器(Iterators )和for of循环
Posted MAX力出奇迹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ES6深度解析]2:迭代器(Iterators )和for of循环相关的知识,希望对你有一定的参考价值。
旧版本for循环
如何循环遍历数组中的元素?20年前,当javascript被引入时,你会这样做:
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
从ES5开始,你就可以使用内置的forEach方法:
myArray.forEach(function (value) {
console.log(value);
});
这个版本稍微短一些,但有一个小缺点:不能使用break语句跳出这个循环,也不能使用return语句从封闭函数返回。如果有一个简洁的for循环语法来循环数组元素,那就太好了。
for-in循环怎么样?
for (var index in myArray) { //不要这么做
console.log(myArray[index]);
}
这不是个好办法,原因如下:
- 在这段代码中,分配给index的值是字符串“0”、“1”、“2”等等,而不是实际的数字。由于不想触发字符串算术
(“2”+ 1 ==“21”)
,这方式是不方便的。 - 循环体不仅会对数组元素执行,还会对其他人添加的任何其他expando属性执行。例如,如果你的数组有一个可枚举的属性
myArray.name
,那么这个循环将额外执行一次index == "name"
。甚至可以访问数组原型链上的属性。 - 最令人惊讶的是,在某些情况下,该代码可以以任意顺序循环遍历数组元素。
简而言之,for-in
被设计用于带有字符串键的普通旧对象。对于数组,就没那么好了。
强大的for-of循环
ES6承诺不会破坏你已经编写的JS代码。数以百万计的网站依赖于for-in
的行为,甚至它在数组上的行为。因此,在数组中使用for-in
时,修复for-in并没有什么问题。ES6改进问题的唯一方法是添加某种新的循环语法。这就是:
for (var value of myArray) {
console.log(value);
}
- 这是迄今为止最简洁、最直接的数组元素循环语法
- 它避免了
for-in
的所有陷阱 - 与
forEach()
不同,它使用break
、continue
和return
for - in
循环用于遍历对象属性。
for - of
循环用于遍历数据,比如数组中的值。
其他集合也支持for-of
for - of
不仅仅适用于数组。它也适用于大多数数组类对象,如DOM节点列表。它也适用于字符串,将字符串作为Unicode字符序列处理:
for (var chr of "以上是关于[ES6深度解析]2:迭代器(Iterators )和for of循环的主要内容,如果未能解决你的问题,请参考以下文章
Python标准模块--Iterators和Generators