您的位置:首页 > Web前端 > JavaScript

js 循环 for in

2015-12-08 10:38 190 查看
背景:由于对 for in 不熟悉,只在数组循环的时候使用过,在一次用 for in 遍历 json 数组的时候,调试看到是按照数组中字符逐个遍历,由于当时急,以为 for in 有什么不安全的地方,根本没来得及看,果断用 for 循环。后来想想,应该是当时没有将返回的结果反序列化,拙~~~。(后来写for 的时候应该是加了反序列化)。

1.   for in 可循环遍历数组、对象(非数组对象上遍历也称枚举)、字符串:

var str = "test";

var obj = {a : 'a', b : 'b'};
var arr = [1, 2, 3, 4];

// 字符串:按序逐个输出字符

for(var ele in str) {

    alert(str[ele]);
}
// 对象
for(var ele in obj){

    alert(obj[ele]);
}
// 数组
for(var ele in arr){

    alert(arr[ele]);
}
2. for in 不会按照属性下标输出

var data = {

      '4': 'first',

    '3': 'second',

      '2': 'third',

      '1': 'fourth'

  };

  for (var i in data) {

    console.log(i + "  " + data[i])

  }

输出结果:

1  fourth
2  third
3  second
4  first

注:按照网上描述,如今所有浏览器的最新版本现在都按chrome的标准执行,先把当中的非负整数键提出来,排序好输出,然后将剩下的定义时的顺序输出。所以,在定义对象的时候,最好不要以纯数字定义键名

3. for in 循环访问的是循环对象的原型

var array=[1,2,3,4,5];
Array.prototype.age=6;
var result = [];
for(var i=0;i<array.length;i++){

    result.push(array[i]);
}
alert(result.join(''));

输出结果:12345;

var array=[1,2,3,4,5];
Array.prototype.age=6;
var result = [];
for(var i in array){

    result.push(array[i]);
}
alert(result.join(''));

输出结果:123456

注 : 在数组遍历的时候,其实最好不要用 for in,for in 会访问该对象的原型,查看其原型下是否有属性,会增加循环额外的压力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: