<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let obj = {
a: 1,
b: 2,
c: 3,
}
console.log(Object.values(obj)) //获取属性值 返回的是数组
console.log(Object.keys(obj)) //获取属性
//给obj添加一个Symbol.iterator 方法 Symbol方法里有next()这样就能循环了
obj[Symbol.iterator] = function () { //为什么不能用for of 循环 因为没有Symbol.iterator方法 //我们自己封装一个
let values = Object.values(obj) //
let index = 0
return { //return返回一个对象 对象里有一个next方法
next() { //next这里不是自定义名称
if (index >= values.length) { //表示循环完成 values.length数组的长度 index循环一次增加一次
return {
// value:"1", //循环过程中的值 固定的
done: true, //循环是否完成
//
}
} else { //没有循环完
return {
done: false,
value: values[index++]
}
}
}
}
}
let va = obj[Symbol.iterator]();
console.log(va) //返回了一个va 对象对象当中有个方法next();
console.log(va.next()) //next()方法相当于for一次一次去调用他done 检测能不能取值
console.log(va.next()) //一次调过来 done 值为false 说明没循环完 接着下一次调用
console.log(va.next()) //
console.log(va.next())
for (let val of obj) {
console.log(val)
}
</script>
</body>
</html>
迭代器2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>迭代器</title>
</head>
<body>
<script>
// 作业1 : 完成课堂代码
// 作业2 : 使用迭代器 遍历对象中的 属性 和 属性值
let obj = {
a: 4,
b: 2,
c: 3,
}
console.log(Object.values(obj)) //获取属性值 返回的是数组
console.log(Object.keys(obj)) //获取属性
//给obj添加一个Symbol.iterator 方法 Symbol方法里有next()这样就能循环了
obj[Symbol.iterator] = function *() { //为什么不能用for of 循环 因为没有Symbol.iterator方法 //我们自己封装一个
let values = Object.keys(obj) //
// let values1 = Object.values(obj)
// let index = 0
for(let k of values){
yield[k, obj[k]]
}
}
for (let [k, v] of obj) {
console.log(k, v)
}
</script>
</body>
</html>
迭代器
最新推荐文章于 2022-07-13 23:58:26 发布