for each in/for in/for of
for each...in
Syntax
for each (variable in object) {
statement
}
variable- 用来遍历属性值的变量,前面的
var关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量.
object- 该对象的属性值会被遍历.
statement- 遍历属性值时执行的语句. 如果想要执行多条语句, 请用(
{ ... }) 将多条语句括住.
一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的indexOf方法.不过,大部分的用户自定义属性都是可遍历的.
for...in
以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。
Syntax:
for (variable in object) { ...
}
参数:
variable- 在每次迭代时,将不同的属性名分配给变量。
object- 被迭代其枚举属性的对象。
for..in 不应该被用来迭代一个下标顺序很重要的 Array .
数组索引仅是可枚举的整数名,其他方面和别的普通对象属性没有什么区别。for...in 并不能够保证返回的是按一定顺序的索引,但是它会返回所有可枚举属性,包括非整数名称的和继承的。
因为迭代的顺序是依赖于执行环境的,所以数组遍历不一定按次序访问元素。 因此当迭代那些访问次序重要的 arrays 时用整数索引去进行 for 循环 (或者使用 Array.prototype.forEach() 或 for...of 循环) 。
仅迭代自身的属性
如果你只要考虑对象本身的属性,而不是它的原型,那么使用 getOwnPropertyNames() 或执行 hasOwnProperty() 来确定某属性是否是对象本身的属性 (也能使用propertyIsEnumerable)。另外,如果你知道外部不存在任何的干扰代码,你可以扩展内置原型与检查方法。
例子
var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
var triangle = {a:1, b:2, c:3};
function ColoredTriangle() {
this.color = "red";
}
ColoredTriangle.prototype = triangle;
var obj = new ColoredTriangle();
for (var prop in obj) {
if( obj.hasOwnProperty( prop ) ) {
console.log("o." + prop + " = " + obj[prop]);
}
}
// Output:
// "o.color = red"
for...of
Syntax
for (variable of iterable) {
statement
}
variable- 在每个迭代中的值被分配给不同的属性可变。
iterable- 可迭代对象的属性进行迭代。


浙公网安备 33010602011771号