遍历

for

循环代码块一定的次数

for (let i = 0; i < 5; i++) {
  console.log(i)
}
// 0 1 2 3 4

forIn

for...in 循环遍历对象的属性

let o = { name: 'Jack', age: 12 }

for (let key in o) {
  console.log(key, o[key])
}
// name Jack
// age 12

forOf

for...of 遍历获取键值

与 forEach()不同的是,它可以正确响应 break、continue 和 return 语句

// array
var arr = ['a', 'b', 'c', 'd']

for (let a in arr) {
  console.log(a) // 0 1 2 3
}

for (let a of arr) {
  console.log(a) // a b c d
}

for...of 循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。这一点跟 for...in 循环也不一样。

let arr = [3, 5, 7]
arr.foo = 'hello'

for (let i in arr) {
  console.log(i) // "0", "1", "2", "foo"
}

for (let i of arr) {
  console.log(i) //  "3", "5", "7"
}

Set 和 Map

var engines = new Set(['Gecko', 'Trident', 'Webkit', 'Webkit'])
for (var e of engines) {
  console.log(e)
}
// Gecko
// Trident
// Webkit

var es6 = new Map()
es6.set('edition', 6)
es6.set('committee', 'TC39')
es6.set('standard', 'ECMA-262')
for (var [name, value] of es6) {
  console.log(name + ': ' + value)
}
// edition: 6
// committee: TC39
// standard: ECMA-262

let map = new Map().set('a', 1).set('b', 2)
for (let pair of map) {
  console.log(pair)
}
// ['a', 1]
// ['b', 2]

for (let [key, value] of map) {
  console.log(key + ' : ' + value)
}
// a : 1
// b : 2

while

只要指定条件为 true,循环就可以一直执行

let i = 0
while (i < 5) {
  console.log(i)
  i += 1
}

// 0 1 2 3 4 5

do/while

do/while 循环是 while 循环的变体。该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环。

let i = 0
do {
  console.log(i)
  i += 1
} while (i < 5)

// 0 1 2 3 4 5

forEach

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

语法:
array.forEach(function(currentValue, index, arr), thisValue)

var arr = [1, 2, 3]
arr.forEach((item, index, arr) => {
  // item为arr的元素,index为下标,arr原数组
  console.log(item) // 1, 2, 3
  console.log(index) // 0, 1, 2
  console.log(arr) // [1, 2, 3]
})

some

some() 方法依次执行数组的每个元素

  • 如果有一个元素满足条件,则表达式返回 true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回 false。
var arr = [1, 2, 3]
arr.some((item, index, arr) => {
  // item为数组中的元素,index为下标,arr为目标数组
  console.log(item) // 1, 2, 3
  console.log(index) // 0, 1, 2
  console.log(arr) // [1, 2, 3]
})

arr.some((item) => {
  return item === 2
})
// true

var result = [1, 5, 3, 6].some((v, i) => v > 10) //所有元素都不满足,返回result = false
var result = [10, 5, 30, 60].some((v, i) => v < 10) //有一个(多个)满足,返回result  = true

every

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。
var arr = [1, 2, 3]
arr.every((item, index, arr) => {
  // item为数组中的元素,index为下标,arr为目标数组
  console.log(item) // 1, 2, 3
  console.log(index) // 0, 1, 2
  console.log(arr) // [1, 2, 3]
})

arr.every((item) => {
  return item > 0
})
// true