1.For...In 声明用于对数组或者对象的属性(可枚举的,即包括实例中的属性,也包括原型中的可枚举属性)进行循环/迭代操作。
对于数组 ,迭代出来的是数组元 素,对于对象 ,迭代出来的是对象的属性;
1 for(var i=0,len=a.length;i<len;i++){ 2 alert(a[i]); 3 }
以上代码完全可以用for in代替:
1 var a = ["a","b","c"]; 2 for(var el in a){ 3 alert(a[el]);//输出为a,b,c 4 }
但需要迭代操作的是对象的时候,简单的for循环就不一定奏效了,最好用for in:
1 var obj = { 2 w: "wen", 3 j: "jian", 4 b: "bao" 5 } 6 for(var v in obj){ 7 document.write(v)+"<br/>"; 8
输出为:
1 w 2 j 3 b
一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:
propertyIsEnumerable 属性 返回 Boolean 值,指出所指定的属性是否为一个对象的一部分以及该属性是否是可列举的。
1 object.propertyIsEnumerable(proName)
参数
object
必选项。一个对象。
proName
必选项。一个属性名称的字符串值。注意是字符串的形式!!
说明
如果
proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回
true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回
false。典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。
propertyIsEnumerable 属性不考虑原型链中的对象。
2.判断对象是否为数组/对象的元素/属性:
格式:(变量 in 对象)......注意,,,
当“对象”为数组时,“变量”指的是数组的“索引”;
当“对象”为对象是,“变量”指的是对象的“属性”(包括实例和原型中的可枚举属性)。
数组示例:
输出为:
对象示例:
1 var obj={ 2 w:"wen", 3 j:"jian", 4 b:"bao" 5 6 } 7 8 var result=(2 in obj); 9 var result1=("j" in obj); 10 11 document.write(result)+"<br/>"; 12 document.write(result1)+"<br/>";
输出为: