for...of
: (ES6)提供统一的遍历机制,所有实现了[Symbol.iterator]接口的对象都可以被遍历。可迭代对象包括Array
,Map
,Set
,String
,TypedArray
,arguments
对象等,Object
不是可迭代对象。
for...in
: 循环以任意序遍历一个对象的可枚举属性,功能类似于Object.keys()。对象的有些属性以相同的方式标记成了只读的,永久的即不可删除的或者不可列举的,这些属性使用这种循环不能枚举出来,比如length、constructor
以及String
的indexOf()
方法或Object
的toString()
方法。用户定义的属性都可以枚举,但是内部属性以及所有的内部方法都是不可枚举的。另外对象可以继承其他对象的属性,那些已继承的用户定义的属性可以使用该方法循环枚举出来。因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。因此当迭代访问顺序很重要的数组时,最好用整数索引去进行for
循环(或者使用Array.prototype.forEach()
或for...of
循环
JavaScript遍历方法比较
本文探讨了JavaScript中的遍历机制,强调了ES6中[Symbol.iterator]接口的重要性,使得多种对象可被遍历。同时,对比了for...of循环和forEach方法在遍历对象和数组时的区别,指出for...of能遍历可枚举属性,但无法遍历不可枚举的内部方法和属性,而forEach专门用于数组遍历,但不支持提前退出循环。
摘要由CSDN通过智能技术生成