您的位置:首页 > Web前端 > JavaScript

JavaScript for...in循环

2016-07-13 14:31 239 查看
以任意序迭代一个对象的可枚举属性。每个不同的属性,语句都会被执行一次。

语法

for(varible in object){.../*以任意序迭代一个对象的可枚举属性。每个不同的属性,语句都会被执行一次。*/}


参数

variable 每次迭代,一个不同的属性名将会赋予 variable

object 可枚举属性被迭代的对象

描述

for…in 循环只遍历可枚举属性。像 Array 和 Object 使用内置构造函数所创建的对象都会继承自 Object.prototype 和 String.prototype 的不可枚举属性,例如 String 的 indexOf() 方法或者 Object 的 toString 方法。循环将迭代对象的所有可枚举属性和从它的构造函数的 prototype 继承而来的(包括被覆盖的内建属性)。

删除,添加或者修改属性

for…in 循环以任意序迭代一个对象的属性。 如果一个属性在一次迭代中被修改,在稍后被访问,其在循环中的值是其在稍后时间的值。一个在被访问之前已经被删除的属性将不会在之后被访问。在迭代进行时被添加到对象的属性,可能在之后的迭代被访问,也可能被忽略。通常,在迭代过程中最好不要在对象上进行添加、修改或者删除属性的操作,除非是对当前正在被访问的属性。这里并不保证是否一个被添加的属性在迭代过程中会被访问到,不保证一个修改后的属性(除非是正在被访问的)会在修改前或者修改后被访问,不保证一个被删除的属性将会在它被删除之前被访问。

数组迭代和for…in

数组索引仅是可枚举的整数名,其他方面和别的普通对象属性没有什么区别。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]);//输出本次循环迭代的属性名和对应的属性值
}

// 输出:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"


var triangle = {a:1, b:2, c:3};

function ColoredTriangle() {//ColoredTriangle对象的构造函数
this.color = "red"; //初始化对象中的属性
}

ColoredTriangle.prototype = triangle;//继承triangle对象

var obj = new ColoredTriangle();//创建一个ColoredTriangle对象并且调用该对象的构造函数

for (var prop in obj) {//循环迭代对象
if( obj.hasOwnProperty( prop ) ) { //判断当前属性是否为迭代对象的自有属性
console.log("o." + prop + " = " + obj[prop]);//如果是自有属性,输出本次循环迭代的属性名和对应的属性值
}
}

// 输出:
// "o.color = red"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息