zoukankan      html  css  js  c++  java
  • javascript中for/in循环及使用技巧

    JavaScript 支持不同类型的循环:

    for - 循环代码块一定的次数

    for/in - 循环遍历对象的属性

    while - 当指定的条件为 true 时循环指定的代码

    do/while - 同样当指定的条件为 true 时循环指定的代码块

    1. in运算符:要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数是一个对象或数组。如果该运算符左边的值是右边对象的一个属性名,则返回true。

    例如:

    var point={x:1,y:2}; //对象直接量
    var has_x="x" in point; //返回true
    var has_z="z" in point; //返回false
    var ts="toString" in point;//返回true,toString为继承方法
    

      

       2. for/in语句:语法,

    for (variable in object)
                               statement;

          提供了一种遍历对象属性的方法。

    例:

    for(var prop in my_object) {
        document.write("name:"+prop+";value:"+my_object[prop],"<br>");
      }
    

      

          javascript的数组是一种特殊的对象,因此for/in循环可以像枚举对象属性一样枚举数组下标。

    可以把一个对象的所有属性名复制到一个数组中,

    例:

    var o= {x:1,y:2,z:3};
      var a=new Array();
      var i=0;
      for (a[i++] in o)
      ;//空语句,用于初始化数组
    

      

        3. in运算符与for/in语句不同,for/in语句in的左边可以是声明一个变量的var语句,数组的一个元素或者是对象的一个属性,不能使字符串。

        4. 数组常用的存取属性运算符是“[]”,而不是“.”。使用“[]”来命名属性名师字符串值,是动态的,可以在运行时改变,而不是一个标识符“.”。

    例:

    var stock_name= get_stock_name_from_user();//从用户处获取股票名
      var share= get_number_of_shares();//得到股票数量
      portfolio[stock_name]= share;//动态地创建数组股票,并为每支股票赋值
      将该例子与for/in循环一起使用,当用户输入了他的投资组合,可以计算当前总值
      var value= 0;
      for (stock in portfolio) {
        value +=get_share_value(stock)*portfolio[stock];
      }
    

      

    stock存取的是每支股票的名字。      

    portfolio[stock]存取的是每支股票的数量。

    for-in循环

    功能:遍历对象属性,把属性名和属性值都提出来

    var obj = {
     "key1":"value1",
     "key2":"value2",
     "key3":"value3"
    };
    function EnumaKey(){
     for(var key in obj ){
      alert(key);
     }
    }
    function EnumaVal(){
     for(var key in obj ){
      alert(obj[key]);
     }
    }
    EnumaKey(obj)
    //key1 key2 key3
    EnumaVal(obj)
    //value1 value2 value3
    

      

    数组也可以这样遍历,但不推荐,因为不能保证顺序,而且如果在Array的原型上添加了属性,这个属性也会被遍历出来。

    for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。

    从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。另外,在for-in中,属性列表的顺序(序列)是不能保证的。所以最好数组使用正常的for循环,对象使用for-in循环。

  • 相关阅读:
    分层图最短路(DP思想) BZOJ2662 [BeiJing wc2012]冻结
    动态规划 BZOJ1925 地精部落
    线性DP SPOJ Mobile Service
    线性DP codevs2185 最长公共上升子序列
    数位DP POJ3208 Apocalypse Someday
    线性DP POJ3666 Making the Grade
    杨氏矩阵 线性DP? POJ2279 Mr.Young's Picture Permutations
    tarjan强连通分量 洛谷P1262 间谍网络
    树链剖分 BZOJ3589 动态树
    二分图 BZOJ4554 [Tjoi2016&Heoi2016]游戏
  • 原文地址:https://www.cnblogs.com/good10000/p/4778114.html
Copyright © 2011-2022 走看看