javascript循环

——这篇文章主要介绍javascript中几大循环的区别

最原始的js循环

es5出现以前,我们要遍历一个数组时,是这样写的

let arr = [{a: 1}, {a: 2}, {a: 5}]
for (let i = 0; i < arr.length; i++) {
  console.log(arr[index])
}

es5的循环

自从es5诞生以后,多了两个循环,forEach和for in,接下来分别介绍这两个循环

1. forEach

let arr = [{a: 1}, {a: 2}, {a: 5}]
arr.forEach((item, index, arr) => {
   console.log(item, index, arr)
   if (item.a === 2) {
    console.log(‘中断’)
    return
  }
  console.log(‘测试中断’)
})

forEach的写法比原始的for循环简单了很多,我们也不需要定义一个变量去做循环。使用forEach不能用 break和continue中断循环,使用return也只能终止本次循环,不能中断整个循环语句。

2. for in

用for in 来遍历对象

var obj = {a: 1, b: 5, c: 7}
for (let key in obj) {
  console.log(`obj.${key} = ${obj[key]}`)
}

for in除了可以遍历对象,也可以用来遍历数组

let arr = [{a: 1}, {a: 2}, {a: 5}]
for (let i in arr) {
  console.log(arr[i])
}

for in 写法比原始的for循环简单了写,也弥补了forEach的缺陷。但是for in 一般是用来遍历对象,不推荐用来遍历数组。

for in 遍历数组弊端
  1. for (let index in arr) 中index的类型不是number,而是string
let arr = [{a: 1}, {a: 2}, {a: 5}]
for (let index in arr) {
  console.log(index + 1)
}
// 01
// 11
// 21
  1. 不仅数组本身的元素将被遍历到,自定义的属性也会被遍历到,甚至数组原型链上的属性也会被遍历到
var arr=new Array(1,2,3);
arr.name="hello";
Array.prototype.method=function(){
  console.log("world");
}
for (var index in arr) {
  console.log(index);
}
// 0
// 1
// 2
// name
// method

es6的循环

for of

es6中引入了一种新的循环方法,它就是for-of循环,它既比传统的for循环简洁,又弥补了forEach和for-in循环的弊端。

let arr = [{a: 1}, {a: 2}, {a: 5}]
for (let itemof arr) {
  console.log(item)
}

写法上 for of 和 for in 很相似,但是for of 的功能更加丰富

1. 循环数组
let arr= [10, 40, 70];
for (let value of arr) {
  console.log(value);
}

// 10
// 40
// 70
2. 循环字符串
let str= "this";
for (let value of str) {
  console.log(value);
}
// t
// h
// i
// s
3. 循环一个map
let map= new Map([["a", 1], ["b", 2], ["c", 3]]);

for (let [key, value] of map) {
  console.log(key, value);
}
// a 1
// b 2
// c 3
for (let item of map) {
  console.log(item);
}
// [a, 1]
// [b, 2]
// [c, 3]
4. 遍历一个对象

for of 不能像for in那样直接遍历一个对象,我们可以用Object.keys()方法去解决这个问题

let obj = {a: 12, b: 56, c: 89}
for (let key of Object.keys(obj)) {
  console.log(`${key} = ${obj[key]}`)
}
// a = 12
// b = 56 
// c = 89
5.遍历一个 Set
let set= new Set([1, 1, 2, 2, 3, 3]);
for (let value of set) {
  console.log(value);
}
// 1
// 2
// 3

推荐阅读更多精彩内容