美文网首页
for... in与for...of

for... in与for...of

作者: 郭_小青 | 来源:发表于2021-04-13 10:15 被阅读0次
  1. for...in 循环主要是为了遍历对象而生,不适用于遍历数组
  2. for...of循环可以用来遍历数组、类数组对象,字符串、Set、Map 以及 Generator 对象

一:数组

of是输出value, in输出的是索引index

function test(){
  let a=['red','green','yellow','bank']
  let ofArr = []
  let inArr = []
  for(let i of a){
     ofArr.push(i)
  }
  for(let j in a){
     inArr.push(j)
  }
  console.log(ofArr) // ["red", "green", "yellow", "bank"]
  console.log(inArr) // ["0", "1", "2", "3"]
}

二维数组

function test(){
 let a = [{key:'red', value:1}, {key:'green', value:2}, {key:'yellow', value:3}, {key:'bank', value:4}]
  let ofArr = []
  let inArr = []
  for(let i of a){
     ofArr.push(i)
  }
  for(let j in a){
     inArr.push(j)
  }
  console.log(ofArr) 
  console.log(inArr) 
}
输出: image.png

二:对象

for...of循环对象时会报错

function test(){
  let a = {key:'red', value:1}
  let ofArr = []
  let inArr = []
 for(let i of a){ // 报错
     ofArr.push(i)
  }
  for(let j in a){
     inArr.push(j)
  }
  console.log(ofArr) // 报错
  console.log(inArr)  // ["key", "value"]
}
test()

三:

无论是 for...in 还是 for...of 都不能遍历出 Symbol 类型的值,遍历 Symbol 类型的值需要用 Object.getOwnPropertySymbols() 方法

let a = Symbol('a')
let b = Symbol('b')
let obj = {
    [a]: 'hello',
    [b]: 'world',
    c: 'es6',
    d: 'dom'
  }
for(let key in obj) {
    console.info(key + ' --> ' + obj[key])
  }

  /*
    c --> es6
    d --> dom
  */

  let objSymbols = Object.getOwnPropertySymbols(obj)
  console.info(objSymbols)    //  [Symbol(a), Symbol(b)]
  objSymbols.forEach(item => {
    console.info(item.toString() + ' --> ' + obj[item])
  })

  /*
    Symbol(a) --> hello
    Symbol(b) --> world
  */

  // Reflect.ownKeys 方法可以返回所有类型的键名,包括常规键名和Symbol键名
  let keyArray = Reflect.ownKeys(obj)
  console.log(keyArray)      //  ["c", "d", Symbol(a), Symbol(b)]

相关文章

网友评论

      本文标题:for... in与for...of

      本文链接:https://www.haomeiwen.com/subject/pmbxlltx.html