for in和for of 的区别

1. for-in循环

for-in循环主要用于遍历对象,格式:for(let keys in zhangsan){}
keys表示obj对象的每一个键值对的键
所有循环中,需要使用obj[keys]来取到每一个值
for-in 循环,遍历时不仅能读取对象自身上面的成员属性,也能延着原型链遍历出对象的原型属性所以可以使用hasOwnProperty判断一个属性是不是对象自身上的属性obj.hasOwnProperty(keys)==true 表示这个属性是对象的成员属性,而不是原型属性。

//声明一个Peson类
function Person(){
    this.name = "张三";
    this.age = 14;
    this.func1 = function(){ 
    }
}
//实例化这个类
let zhangsan = new Person();
//使用for-in遍历这个对象
for(let keys in zhangsan){
    console.log(zhangsan[keys])
} 

2.for of

for…of循环内部调用的是数据结构的Symbol.iterator方法。
for…of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串

  1. 数组
let arr = ['a', 'b', 'c', 'd']; 
for (let a in arr) {
  console.log(a); // 0 1 2 3
} 
for (let a of arr) {
  console.log(a); // a b c d
} 

上面代码表明,for…in循环读取键名,for…of循环读取键值。如果要通过for…of循环,获取数组的索引,可以借助数组实例的entries方法和keys方法

2.Set 和 Map 结构

let engines = new Set(["Gecko", "Trident", "Webkit", "Webkit"]);
for (let e of engines) {
  console.log(e);
}
// Gecko  Trident    Webkit

let es6 = new Map();
es6.set("edition", 6);
es6.set("committee", "TC39");
es6.set("standard", "ECMA-262");
for (let [name, value] of es6) {
  console.log(name + ": " + value);
}
// edition: 6
// committee: TC39
// standard: ECMA-262

上面代码演示了如何遍历 Set 结构和 Map 结构。值得注意的地方有两个,首先,遍历的顺序是按照各个成员被添加进数据结构的顺序。其次,Set 结构遍历时,返回的是一个值,而 Map 结构遍历时,返回的是一个数组,该数组的两个成员分别为当前 Map 成员的键名和键值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值