for in 与 for of js

使用方法之
一、 for in -(ES5)(注意会遍历原型方法和属性)

问题: i是字符串索引,顺序不确定,会遍历所有可枚举属性,包括原型上的method和name
用处: 常用于遍历对象(由于会遍历原型上的方法,需要用hasOwnPropery方法可以判断某属性是否是该对象的实例属性)
对比: Object.keys()获取实例属性组成的数组,不包括原型方法和属性

遍历数组(不推荐)
const arr = [3,2,4]
for (const i in arr) { // i是索引字符串
console.log(i, arr[i])
}
遍历对象
Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
for (var key in myObject) { // key是键名
console.log(key, myObject[key]);
}

二、for of -(ES6)
问题:不能遍历普通对象,因为没有迭代器对象
用处:遍历 数 / 数组对象 / 字符串 / map / set 等拥有迭代器对象的集合
对比: 与forEach()不同的是,它可以正确响应break、continue和return语句

遍历数组
for (let item of [3,2,4]) {
console.log(item)
}

遍历可迭代对象map
遍历map对象时适合用解构,例如;
for (var [key, value] of phoneBookMap) {
console.log(key + "'s phone number is: " + value);
}

myObject.toString()会使对象转化为字符串
myObjectSymbol.iterator方法,变成可迭代对象,就可以遍历这个对象了

可迭代对象的概念几乎贯穿于整门语言之中,不仅是for-of循环,还有Map和Set构造函数、解构赋值,以及新的展开操作符。
迭代器对象可以是任意具有.next()方法的对象,for-of循环将重复调用这个方法,每次循环调用一次。

遍历普通对象
首先调用集合的Symbol.iterator方法,返回一个新的迭代器对象。
var zeroesForeverIterator = {
[Symbol.iterator]: function () {
return this;
},
next: function () {
return {done: false, value: 0};
}
};
链接:https://www.jianshu.com/p/c43f418d6bf0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值