js中对象分为可迭代和不可迭代 如果是可迭代哪它就会有一个[Symbol.iterator] 函数
这个函数就是对象的迭代器函数,如用for of 如果遍历的对象没有这个迭代方法那么就会报错
for of 传入的是可迭代对象,但是如何吧一个不可迭代的对象变为可迭代的对象呢!
很简单就是自己写一个[Symbol.iterator] 函数。
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
let obj = {
a:1,
b:2
}
obj[Symbol.iterator] = function () {
//取到对象的每个key值返回一个数组
let keys = Object.keys(obj);
//取到key值的长度
let len = keys.length;
//定义循环变量
let n = 0;
//返回对象 每次迭代会自动调用对象里面的next方法
return {
next(){
if(n < len){
//返回值有value和done
//value能自定义
//done为true跳出循环
return{
value:{k:keys[n],v:obj[keys[n++]]},
done:false
}
}else{
return{
done:true
}
}
}
}
}
//循环
//for of 只能遍历可迭代对象
//所以自己写了个迭代器 详情请查阅web迭代协议
//返回的是个对象的key和value
for(let {k,v} of obj){
console.log(k,v);
}
</script>
</body>
</html>
注释很完整就不多讲了,
输出如下:

希望能够帮助到你们!!
原文:https://www.cnblogs.com/y-y-y-y/p/10535800.html