js 循環 for in

背景:由於對 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 會訪問該對象的原型,查看其原型下是否有屬性,會增加循環額外的壓力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章