JS - for in 和 for of 的遍历顺序

JavaScript011

JS - for in 和 for of 的遍历顺序,第1张

在 ECMA-262 中没有明确规定此行为,只说取决于实现。现在的普遍实现是先把当中的非负整数键提出来,排序好输出,然后将剩下的按定义时的顺序输出。

参考

for in 循环的输出顺序问题 - 司徒正美 - 博客园

对Set和Map,for of 遍历的顺序是按照各个成员被添加进数据结构的顺序。

参考

Iterator 和 for...of 循环 - ECMAScript 6入门

for in在javascript中的具体情况是:

1、解析

for...in 语句对应于一个对象的每个,或一个数组的每个元素,执行一个或多个语句。 for (variable in [object | array])

2、参数

variable,必选项。一个变量,它可以是 object 的任一属性或 array 的任一元素。object, array,可选项。要在其上遍历的对象或数组。

3、说明

在循环的每次迭代前,variable 被赋予 object 的下一个属性或 array 的下一个元素。然后可以在循环内的任一语句中使用它,就好像正在使用 object 的该属性或 array 的该元素一样。

当在一个对象上迭代时,没有办法决定或控制把对象的成员赋给 variable 的次序。在数组内将按元素的次序执行迭代,也就是,0、1、2、......

for in是ES5标准,遍历key(属性名),并且原型链上的所有属性也会被遍历。过滤原型链上的属性可以用hasOwnProperty()方法。for in遍历后不能保证顺序(也就是顺序可能会被打乱)

for of 是ES6标准,遍历value(属性值),这个方法修复for in存在的缺陷。