前端技术-ES6(08)

Symbol和迭代器

//如果一旦Symbol作为对象属性,for(var i in obj)、object.keys、JSON.stringify都是拿不到这个key的,所以私有属性
//Object.getOwnPropertySymbols 可以拿到

//for适合便利数组,forin适合便利键值对,还有就是一些对象的遍历方法如foreach。。,这些都有一定的局限性
//新引入的for of方式,以后的趋势
const arr2 = [1,2,3,4]
for(const item of newArr2){
if(item > 2) {
break
}
}
//arr.forEach()//不能跳出循环
//arr.some()返回true可跳出循环
//arr.every()返回false可跳出循环

//for of对于对象 set等的遍历一样,对于map遍历的时候,要注意以下:
const mmm = new Map()
mmm.set(‘foo’,‘123’)
mmm.set(‘bar’,‘234’)
for(const item of mmm){
console.log(“item”, item)//item竟然时一个数组,每个数组就两元素,一个key、一个value,所以结合数组的解构,可以方便拿到keyvalue
}

for(const [key,value] of mmm){
console.log(“item”, key, value)
}

//以下会报错,为什么呢,先看for of的原理
// const obje = {name : ‘a’, age : 18}
// for(const item of obje){
// console.log(‘item’,item)
// }

//for of工作原理:实现了一个iterable迭代接口
const iterator_set = mmmSymbol.iterator
console.log(“iterator next”, iterator_set.next())
console.log(“iterator next”, iterator_set.next())
console.log(“iterator next”, iterator_set.next())
console.log(“iterator next”, iterator_set.next())

//让forof可以遍历对象
const objjj = {
store : [‘foo’, ‘bar’, ‘baz’],
Symbol.iterator{
let index = 0;
const _this = this;
return {
next : function(){
const result = {
value : _this.store[index],
done: index >= _this.store.length
}
index ++
return result;
}
}
}
}
for(const item of objjj){
console.log(“item”, item)
}

//迭代器模式:任务列表的实现
const todos = {
life : [“吃饭”,“睡觉”,“打豆豆”],
learn:[“英语”,“语文”,“数学”],
//实现方式一
each: function(callback){
const all = [].concat(this.life, this.learn);
for(const item of all){
callback(item);
}
},
//实现方式二
Symbol.iterator{
const all = […this.life, …this.learn]
let index = 0;
return {
next: function(){
const result = {
value : all[index],
done : index >= all.length
};
index++
return result;
}
}
}
}
todos.each(item => console.log(item));
for(const item of todos){
console.log(item)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值