for in 和 for of 的区别?

1、for...of
ES6 借鉴 C++、Java、C# 和 Python 语言,引入了for...of循环,作为遍历所有数据结构的统一的方法。

一个数据结构只要部署了Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部调用的是数据结构的Symbol.iterator方法。

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


2、for...in
以任意顺序遍历一个对象自有的、继承的、可枚举的、非Symbol的属性。对于每个不同的属性,语句都会被执行。


3、区别
JavaScript 原有的for...in循环,只能获得对象的键名,不能直接获取键值。ES6 提供for...of循环,允许遍历获得键值。

var 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...of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。这一点跟for...in循环也不一样。

let arr = [3, 5, 7];
arr.foo = 'hello';
for (let i in arr) {
    console.log(i); // "0", "1", "2", "foo"
}
for (let i of arr) {
    console.log(i); // "3", "5", "7"
}
for...of循环不会返回数组arr的foo属性。 

推荐在循环对象属性的时候,使用for...in,在遍历数组的时候的时候使用for...of。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对数组的遍历大家最常用的就是for循环,ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map、f...
    筱筱岳阅读 14,875评论 0 0
  • 1 遍历数组通常用for循环 ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map、filter...
    Haiya_32ef阅读 170,307评论 12 129
  • 注:for...of是ES6新引入的特性。修复了ES5引入的for...in的不足先定义一个数组:let aArr...
    尤雨溪的大迷弟阅读 2,199评论 0 0
  • 我来自木棉天堂, 带了一身芳香。 在春天开花—— 一树橙黄。 在夏天繁叶—— 满冠幻想。 在秋天枯萎—— 干枝摇晃...
    郭小四2阅读 450评论 0 0
  • 没有感情基础的告白,只是为了自己感动自己。
    dasgrab阅读 172评论 0 0