1,for...of循环
原生JS引入的大量的循环,对于直接遍历数据集不太友好
ES6引入的for..of循环,可以很方便的遍历数据
注:只是提高 了处理效率,并没有对遍历过程中对于单个数据的操作优化
var arr = ['admin', 'root', 'xiaoli', 'old-wang']
// // 1.for
// for(var i = 0; i < arr.length; i++){
// console.log(arr[i])
// }
// // 2. while、do-while
// // ...
// // 3. for..in
// for(var index in arr){
// console.log(arr[index])
// }
// 4. for..of
for(var name of arr){
console.log(name)
}
2、循环原理--迭代器
字符串对象->包含Symbol类型的迭代器属性,可以用for..of迭代
数值对象->不包含Symbol类型的迭代属性,不能使用for..of进行迭代
---不能进行迭代的使用自定义迭代器,达到创建的对象支持for..of循环遍历
class Person {
constructor(name, age, gender, addr, phone) {
this.name = name
this.age = age
this.gender = gender
this.addr= addr
this.phone = phone
}
[Symbol.iterator]() {
let values = Object.values(this) // 获取当前对象属性值
let index = 0
// 迭代器函数固定返回值语法
return {
next() {
if(index < values.length) {
// 返回的数据:固定语法{value: 值, done:是否继续迭代}
return { value: values[index++], done:false}
} else {
return { value: values[index++], done:true}
}
}
}
}
}
// 创建对象
var tom = new Person("汤姆", 19, "男", "郑州", "18899007766")
// 问题:如何使用for..of对tom对象进行迭代?
for(var attr of tom) {
console.log(attr)
}