1. 程式人生 > >關於js的 for...in 你了解多少

關於js的 for...in 你了解多少

ons 註意點 lse 隱藏 繼續 pty array car 數組下標

For...In

聲明用於對數組或者對象的屬性進行循環/叠代操作。

 1. 求value: 對於數組 ,叠代出來的是數組元素,對於對象,叠代出來的是對象的屬性值:

1)數組示例

  var x  
  var mycars = new Array()  
  mycars[0] = 'Saab'  
  mycars[1] = 'Volvo'  
  mycars[2] = 'BMW'  
    
  for (var x in mycars)  
  {  
    console.log(mycars[x])  
  }  
  // 輸出為:
  // Saab  
  // Volvo  
  // BMW 

2)對象示例:

  var obj = {  
    w: 'wen',  
    j: 'jian',  
    b: 'bao'  
  }
 
  for (var v in obj)
  {  
    console.log(obj[v])  // 這裏為什麽不能用 obj.v 呢?[淘氣]
  }
  // 輸出為:
  // wen
  // jian
  // bao

 2. 求key:

1)對於數組,輸出稱之為下標的東西:

  var x  
  var mycars = new Array()
  mycars[0] = 'Saab'  
  mycars[1] = 'Volvo'  
  mycars[3] = 'BMW'  
     
  for (var x in mycars)  
  {  
     console.log(x)  
  }
  // 輸出:
  // 0
  // 1
  // 3

2)而對於對象,這裏不叫下標,該叫屬性了:

  var obj = {  
      w: 'wen',  
      j: 'jian',  
      b: 'bao'  
  }  
  
  for (var v in obj)
  {  
    console.log(v)  
  }
  
  // 輸出:
  // w
  // j
  // b
  1. 判斷【元素】是否在數組/對象裏邊(或者說屬於這個數組/對象

    這裏有個註意點:* 首先要清楚這個【元素】是 key 還是 value *

多說無益,走一波代碼

1)數組判斷 key

  var arr = ['a','b','1',2,'str']
  console.log(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6])
  // 輸出:a b 1 2 str undefined undefined
  console.log(0 in arr)  // true
  console.log(4 in arr)  // true
  console.log(5 in arr)  // false

因為js數組給人直觀的是value值,而它的key下標)是從零默認自增的並且是隱藏不易被察覺的 ,(在不指定下標的情況下賦值自動自增);如果前邊有指定下標賦值,繼續後邊不指定下標賦值時會以最大下標繼續自增。同時要註意 跨自增值的下標會改變數組的長度

引出的技術點:文科太差,理解不了的,可以直接看代碼

  var arr = ['a','b','1',2,'str']
  console.log(arr.length)  // 5
  arr[6] = '@#$'
  console.log(arr)         // ["a", "b", "1", 2, "str", empty, "@#$"]
  console.log(arr.length)  // 7
  console.log(5 in arr)    // false
  arr = arr.concat(null)
  console.log(arr)         // ["a", "b", "1", 2, "str", empty, "@#$", null]
  console.log(arr.length)  // 8
  console.log(arr[4], arr[5], arr[6], arr[7])
  // str undefined @#$ null

數組下標賦值如果有跳躍時,你可以理解為長度不準/或者理解為被 undefined 占位補充了

使用in判斷key(下標)在不在數組中好像很管用,但不常用

2)對象判斷 key

  var obj = {
    a: 'qq',
    b: '66',
    c: 'ee',
    D: 'ee'
  }
  console.log('d' in obj)  // false
  console.log('D' in obj && 'c' in obj)  // true

使用in判斷key(屬性)在不在對象中好像也很管用

3)數組判斷value

  var arr = ['a','b','1',2,'str']
  console.log('b' in arr)  // false
  console.log('3' in arr)  // true

明明‘b‘這個值在數組裏邊,卻返回 false,‘3‘不在數組中卻返回了 true 看來不能用in判斷數組的值

4)對象判斷value

  var obj = {
    w: 'wen',
    j: 'jian',
    b: 'bao'
  }
  console.log('wen' in obj)  // false
  console.log('ao' in obj)   // false

明明‘wen‘這個值在對象裏邊,卻返回 false. ‘明明‘ 在這裏很躺槍,in 在這裏也顯得無能為力。

綜上所述

  for (var item in arr) {}
  for (var v in obj) {}

此時的 item 是 arr 的下標;

v 是 obj 的屬性。

所以【in】 只能用來判斷 【數組的下標】 或者 【對象的屬性

你記住了嗎?

關於js的 for...in 你了解多少