之前对三者的区别并不是很明确清晰,所以准备重新温习。
看了很多,也总结不少,感觉还是MDN总结的挺好
forEach只能用于数组而且forEach不支持break,return,continue.
for...of与for...in的区别
无论是for...in
还是for...of
语句都是迭代一些东西。它们之间的主要区别在于它们的迭代方式。
这里的迭代其实就循环的意思或者也可以说成枚举
for...in 语句以任意顺序迭代对象的可枚举属性。
for...of
语句遍历可迭代对象定义要迭代的数据。
以下示例显示了与Array一起使用时,for...of
循环和for...in
循环之间的区别。
Object.prototype.objCustom = function() {};Array.prototype.arrCustom = function() {};let iterable = [3, 5, 7];iterable.foo = 'hello';for (let i in iterable) {console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom"}for (let i in iterable) {if (iterable.hasOwnProperty(i)) {console.log(i); // 0, 1, 2, "foo"}}//hasOwnProperty() 来检查,如果找到的枚举属性是对象自己的(不是继承的)。如果是,该属性被记录。for (let i of iterable) {console.log(i); // 3, 5, 7}
另外提示一下看到第一个for 。。。 in 结果有点懵的同学:
每个对象将继承objCustom
属性,并且作为Array的每个对象将继承arrCustom
属性
由于继承和原型链,对象iterable
继承属性objCustom
和arrCustom
。