for in
遍历 对象
=> 成员名可以访问当对象里面的每一个数据
=> 所有的名字不一定存在规律
+ 我们有一个叫做 for in 的循环
=> 大部分时候用来遍历对象的
=> 语法:
for (var 变量 in 对象) {
重复执行的代码
}
-> 根据对象内有多少个成员执行多少回
-> 循环的每一次, key 分别是对象的成员名称(字符串类型)
forEach()
=> 语法: 数组.forEach(function (item, index, arr) {})
-> item: 数组得每一项
-> index: 数组每一项得索引
-> arr: 原始数组
=> 作用: 取代 for 循环得作用, 遍历数组
=> 没有返回值
// var arr = ['hello', 'world', '你好', '世界']
// var res = arr.forEach(function (item, index, arr) {
// // 这个函数, 会根据数组里面有多少个数据执行多少回
// // console.log('我执行了')
// // 这个函数每一次执行得时候, item 分别是数组里面得每一项
// // 这个函数每一次执行得时候, index 分别是数组里面得每一项得索引
// // 这个函数每一次执行得时候, arr 每一次都是原始数组
// console.log(item, '-----', index, '-----', arr)
// })
map()
=> 语法: 数组.map(function (item, index, arr) {})
-> item: 数组得每一项
-> index: 数组每一项得索引
-> arr: 原始数组
=> 作用: 映射数组
=> 返回值: 是一个新的数组
-> 里面是对原始数组每一个数据得操作
-> 返回值数组, 一定和原始数组长度一样
=> 不改变原始数组
for of
Set数据结构没有索引 没有key 可以用for of 遍历
=> 遍历数据 map 结构 需要解构赋值
=> 遍历出来的是里面每一个内容 key 和 value
for (let [key, value] of m) {
// console.log(key, '-----', value)
for-of 更适合迭代器,而for-in更适合遍历对象属性
ES6
同时提供了 Symbol.iterator
属性,只要一个数据结构有这个属性,就会被视为有 Iterator
接口,接着就是如何实现这个接口了,仔细看一下发现就会发现 Symbol.iterator
接口其实是一个 Generator
函数
把 yield 后面的东西当作返回值 并带一个状态 false 结束为true