• js for in 语句


     
    for(variable in object)
       statement
    //variable 是声明一个变量的var语句,数组的一个元素或者是对象的一个属性
    //在循环体内部,对象的一个属性名会被作为字符串赋给变量variable。

    注意:对象的有些属性以相同的方式标记成了只读的,永久的(不可删除的)或者不可列举的(?),这些属性使用for/in循环不能枚举出来。虽然所有的用户定义的属性都可以枚举,但是许多内部属性,包括所有的内部方法都是不可枚举的。另外对象可以继承其他对象的属性,那些已继承的用户定义的属性可以使用for/in 循环枚举出来。

    for(var i=0;i<len;i++)这样的用法一般都可以用for in 来替代。

    例如:
    var a = ["a","b","c"];
    for(var el in a){
    alert(a[el]);
    }
    //这个就是穷举出a中的所有元素,当然上面这个例子是可以用
    for(var i=0,len=a.length;i<len;i++){
    alert(a[i]);
    }
    //这种方式进行循环列出的,不过有时候这种方式就不一定奏效了。
    var a = {"first":1,"second":2,"third":3};
    //这个时候就只能用for in来穷举了。

    一个对象是否可以进行for in穷举,我们可以通过propertyIsEnumerable属性来判断,说明如下:

    object.propertyIsEnumerable(propname)是否可以通过for/in循环看到属性
    propname 一个字符串,包含object属性的名称
    如果object具有名为propname的非继承属性,而且该属性是可枚举的(即用for/in循环可以枚举它),则返回true
    描述:
    用for/in语句可以遍历一个对象"可枚举"的属性,但并非一个对象的所有属性都是可枚举的,通过JavaScript代码添加到对象的属性是可枚举的,而内部对象的预定义属性(如方法)通常是不可枚举的.
    propertyIsEnumerable()方法不检测原型链,这意味它只适用于对象的局部属性,不能检测继承属性的可枚举性

    var o=new Object();
    o.x=3.14;
    o.propertyIsEnumerable("x");//true
    o.propertyIsEnumerable("y");//false have not the property
    o.propertyIsEnumerable("toString");//false inherited
    Object.prototype.propertyIsEnumerable("toString");//false nonenumerable
  • 相关阅读:
    UVA12125 March of the Penguins (最大流+拆点)
    UVA 1317 Concert Hall Scheduling(最小费用最大流)
    UVA10249 The Grand Dinner(最大流)
    UVA1349 Optimal Bus Route Design(KM最佳完美匹配)
    UVA1212 Duopoly(最大流最小割)
    UVA1395 Slim Span(kruskal)
    UVA1045 The Great Wall Game(二分图最佳匹配)
    UVA12168 Cat vs. Dog( 二分图最大独立集)
    hdu3488Tour(KM最佳完美匹配)
    UVA1345 Jamie's Contact Groups(最大流+二分)
  • 原文地址:https://www.cnblogs.com/yjstonestar/p/4245674.html
Copyright © 2020-2023  润新知