for...of原理

let arr = [1,2,3]
for(let i of arr){
	console.log(i)
}
//for ... of内部的实现
try{
	//将可遍历对象转换为遍历器
	let iter = arr[Symbol.iterator]()
	let i = ''
	while(i != undefined){
		i = iter.next().value
		console.log(i)
	}
}catch(e){
	console.log(e)
}

原生javascript中有[Symbol.iterator]接口的:

Array、arguments、NodeList、string、set、map、TypedArray

手写[Symbol.iterator]接口

Object.prototype[Symbol.iterator] = function(){
		let self = this
		let index = 0
		let keys = Object.keys(this)
		return {
			next(){
				if(index<keys.length){
					return {
						value:self[keys[index++]],
						done:false
					}
			   }else{
					return {
						value:undefined,
						done:true	
					}
				}
			}
		}

}

let obj = {
name:'wl',
age:23,
job:'stu',
size:18
}

for(let i of obj){
console.log(i)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值