for in & for of 的区别

对于纯对象的遍历,for..in要厉害一些;

Object.prototype.objCustom = function() {}; 
Array.prototype.arrCustom = function() {};

var arr = [3, 5, 7];
arr.foo = 'hello';

for (var i in arr) {
   // 如果不需要输出原型上的属性,可以用 arr.hasOwnProperty(i) 判断,返回false的则是原型上的属性
   console.log(i);
}
// 结果是:
// 0
// 1
// 2
// foo
// arrCustom
// objCustom

对于数组遍历,如果不需要知道索引,for..of迭代更合适,因为还可以中断;

如果需要知道索引,则forEach()更合适;只可惜forEach遍历数组的时候是无法break或者return false中断的。

Object.prototype.objCustom = function() {}; 
Array.prototype.arrCustom = function() {};

var arr = [3, 5, 7];
arr.foo = 'hello';

arr.forEach(function (value, i) {
  console.log(i);
});
// 结果是:
// 0
// 1
// 2

对于其他字符串,类数组,类型数组的迭代,虽然for..in也有这方面能力,但for..of好像更厉害。

for..of是es6提供的新语法。

for...of :迭代,可以迭代字符串arguments类数组对象、NodeList这类DOM集合、Map、Set、generators...

即原型上具有 [Symbol.iterator] 属性的数据类型才可以使用 for..of。

[Symbol.iterator] 属性值是一个函数,执行该函数会返回一个迭代器,调用该迭代器的next方法就可以逐项遍历数据本身元素了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值