javascript中for/in循环及使用技巧

JavaScript 支持不同类型的循环:

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

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

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

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

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

例如:

1
2
3
4
 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;

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

例:

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

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

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

例:

1
2
3
4
5
  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. 数组常用的存取属性运算符是“[]”,而不是“.”。使用“[]”来命名属性名师字符串值,是动态的,可以在运行时改变,而不是一个标识符“.”。

例:

1
2
3
4
5
6
7
8
  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循环

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 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循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值