for..in和for..of的区别

for...in可以枚举对象;for..of不可以 

var obj = {  a: 1,  b: [],  c: function () {

     }

 };

for (var key in obj) {  

console.log(key);

}

// 结果是:

// a

// b

// c

若换成for...of那么会报错 Uncaught TypeError: obj is not iterable

for..in枚举数组是key;for...of枚举数组得到的是值

var arr = [3, 5, 7]; for (var i in arr) {   console.log(i); }// 结果是: // 0 // 1 // 2 ;是key

var arr = [3, 5, 7]; for (var i of arr) {   console.log(i); }// 结果是: // 3 // 5 // 7;是value

for...each 和for..of 

forEach遍历数组的时候是无法break或者return false中断的

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

array.forEach(function(currentValue, index, arr), thisValue); 第一个是当前的value,第二个当前元素的索引值;第三个是当前数组对象,(第一个是必选,2,3为可选)

var arr = [3, 5, 7];

arr.forEach(function (value) {  

console.log(value);  

if (value == 5) {  

 return false;

 }

});

// 结果是:

// 3

// 5

// 7

return false根本就没作用,一直循环到底。

使用for..of可以用break跳出当前循环

var arr = [3, 5, 7];

for (let value of arr) {

 console.log(value);

 if (value == 5) {  

 break;  

}

}// 结果是:

// 3

// 5

for...in无法遍历字符串;但是for..of可以迭代字符串

let str = 'boo';

for (let value of str) {

 console.log(value);

}

// 结果是:

// "b"

// "o"

// "o"

for..of可以

直接迭代arguments类数组对象,且看

(function() {

 for (let argument of arguments) {

   console.log(argument);  

}

})(1, 2, 3);

// 结果是: // 1 // 2 // 3

 

for..of可以迭代NodeList这类DOM集合

let elements = document.querySelectorAll('body');

for (let element of elements) {  

console.log(element.tagName);

}

// 结果是: // "BODY" 

for..of迭代map

let mapData = new Map([['a', 1], ['b', 2], ['c', 3]]);

for (let [key, value] of mapData) {  

console.log(value);

}

// 结果是: // 1 // 2 // 3

for..of技能更广,但是毕竟是ES6新特性,IE浏览器不支持,不过随着发展肯定是越来越支持

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值