【www.bbyears.com--js教程】
关于js中的关键字in,我们使用最多的大概就是for…in循环了,可以用来遍历数组和对象,而其实除了循环以外,in还可以用来判断。
判断数组或者对象中是否有某个键名,如:
2 in ["a","b","c"] // true
"b" in {"a":1,"b":2} //true
注意in只判断键名,不问键值,比如:
var obj1 = {"a":1,"b":2};
obj.b = undefined;
"b" in obj1; //true
var obj2 = {"a":1,"b":2};
obj.b = null;
"b" in obj2; //true
var arr= ["a","b","c"];
arr[2] = undefined;
2 in arr; //true
以上几种情况,键值不论设为什么,in只判断键名。还有一个情况:
var obj = {"a":1,"b":2};
delete obj.b;
"b" in obj; //false
delete 会删除对象的属性,这样in就返回false了。
in只能用来判断数组和对象,不能判断其他类型,只会返回布尔值,所以在有些判断中还是很有用的。
js中for in的用法
for(var i=0;i
var a = ["a","b","c"];
for(var el in a){
alert(a[el]);
}
这个就是穷举出a中的所有元素,当然上面这个例子是可以用
for(var i=0,len=a.length;i
}
这种方式进行循环列出的,不过有时候这种方式就不一定奏效了。
例如:
var a = {"first":1,"second":2,"third":3};
这个时候就只能用for in来穷举了。
一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:
propertyIsEnumerable 属性
返回 Boolean 值,指出所指定的属性是否为一个对象的一部分以及该属性是否是可列举的。
object.propertyIsEnumerable(proName)
参数
object
必选项。一个对象。
proName
必选项。一个属性名称的字符串值。
说明
如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。
propertyIsEnumerable 属性不考虑原型链中的对象。