JS中for...in 语句用于对数组或者对象的属性进行循环操作吗?

JavaScript016

JS中for...in 语句用于对数组或者对象的属性进行循环操作吗?,第1张

是的

for(variable in object)

object为null、undefined,javascript会跳过循环执行后面的代码,在ECMAScript3中可能会抛出类型错误异常

object为原始值,会转换为与之对应的包装对象

若为对象类型,javascript会依次枚举对象的属性来执行循环,在每次循环前,javascript都会先计算variable表达式的值,并将属性名(一个字符串)赋值给它

例子

var obj = {type:'human',history:'300000years',use:'example'}

var arr2 = [],i=0

for(arr2[i++] in obj) /*empty*/

console.log(arr2) //["type","history","use"]

in 运算符并不是直接在数组中查找是否存在指定的值!

如果右边是数组左边是数字,会把左边的数字 (字符串形式的也可以如 "2" in arr 等于 2 in arr)当成一个索引去检查,如果索引是合法的就返回true。

如果右边是数组左边是字符串 比如"id",会把左边的值当成一个属性去检查,如果找到该属性就返回true。

如果右边是对象这个时候不管左边字符串还是数字,会把左边的值当成一个属性去检查,如果找到该属性就返回true。

所以在上面的例子中:

第一个  ("b" in arr)中的 "b" 不是索引,arr中也没有这个属性 故返回 false.

第二个  (4 in arr)中的 4  是合法索引(上面的arr的合法索引是0-4),故返回 true.