资讯专栏INFORMATION COLUMN

(for in)遍历键名和 (for of)遍历键值,这种说法严谨吗?

Labradors / 3406人阅读

摘要:但也可用于数组遍历,返回的值是数组的索引,因为,严格来说,数组也是一个对象,所对应的属性是每个值的索引。只遍历对象自身的和继承的可枚举的属性摘自阮一峰入门对象扩展一章。为新增遍历方法。

[1] const arr = [7, 8, 9];
const obj = {
  a: 4,
  b: 5,
  c: 6
};
[2] for (let v in arr){
 console.log(v);
}
// 0, 1, 2
[3 ]for (let v in obj){
 console.log(v);
}
// a, b, c
[4] arr.child = "child";
[5] arr.__proto__.getChild = function () {
    return this.child;
     };
[6] Array.prototype.parent = "parent";
[7] for (let v in arr){
        console.log(v);
     }
//  0, 1, 2, child, getChild, parent
[8]for (let v of arr){
       console.log(v);
    }
// 7, 8, 9
[9] for (let v of arr.values()){
       console.log(v);
    }
// 7, 8, 9
[10] for (let v of obj){
       console.log(v);
    }
// 报错 
[11] typeof arr.keys(); // "object"
arr.keys() instanceof Array; // false
arr.keys() instanceof Object; // true
for in

for in在ES5中便出现了。一般用来遍历对象属性。但也可用于数组遍历,返回的值是数组的索引,因为,严格来说,数组也是一个对象,所对应的属性是每个值的索引。 for-in只遍历对象自身的和继承的可枚举的属性(摘自 阮一峰ECMAScript 6 入门-对象扩展一章)
如[4]、[5]、[6]所示,为数组添加可遍历属性 (所对应描述器descriptor的enumerable属性为true) ,在[7]中用for-in遍历都可遍历出来。

for of

for of为ES6新增遍历方法。其可遍历所有具有 iterator 接口的数据结构。for...of循环内部调用的是数据结构的Symbol.iterator方法(generator函数)。(摘自 阮一峰ECMAScript 6 入门--Iterator 和 for...of 循环一章)。Symbol.iterator方法返回的是一个遍历器,当用for-of去遍历的时候, 自动调用里面的next方法。
如[8], [9]所示,数组原生具备iterator接口(即默认部署了Symbol.iterator属性),for...of循环本质上就是调用这个接口产生的 遍历器。再看

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97841.html

相关文章

  • ES6—面试常见ES6问题集锦(14)

    摘要:函数的关键字的作用是停止执行退出函数暂停执行,等待方法调用停止执行,可自行恢复执行答案解析函数可以有很多个。简答题说出至少个的新特性,并简述它们的作用。简答题答关键字,用于声明只在块级作用域起作用的变量。对象,更合理规范地处理异步操作。 通过对ES6系列文章的学习,相信大家对ES6已结有一定程度的了解。 所以本节的目的在于通过测试,便于让大家了解在学习中的知识掌握情况,查缺补漏,一步一...

    genedna 评论0 收藏0
  • es6 Map和set

    摘要:返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。该数组中的每一项也必须是数组,内部数组的首个项会作为键,第二项则为对应值。返回所有成员的遍历器需要特别注意的是,的遍历顺序就是插入顺序。 Js大部分历史时期都只存在一种集合类型,也就是数组类型。数组在 JS 中的使用正如其他语言的数组一样,但缺少更多类型的集合导致数组也经常被当作队列与栈来使用。数组只使用了数值型的索引,而...

    superPershing 评论0 收藏0
  • es6 Set和WeakSet

    摘要:返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。上面代码中,方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。因此,适合临时存放一组对象,以及存放跟对象绑定的信息。 Js大部分历史时期都只存在一种集合类型,也就是数组类型。数组在 JS 中的使用正如其他语言的数组一样,但缺少更多类型的集合导致数组也经常被当作队列与栈来使用。数组只使用了数值...

    marser 评论0 收藏0
  • es6学习之map和set

    摘要:和定义一组键值对的集合它是一组键值对的数据结构,由于之前的键必须是字符串。 Map和Set Map 定义:一组键值对的集合 它是一组键值对的数据结构,由于之前javascript的键(key)必须是字符串。为了使键可以是多种类型的于是在最新的es6中引入了map这种数据结构,这样可以加快查询速度,类似于查字典 方法和属性 var m = map() //空map m.set(学生年龄,...

    lvzishen 评论0 收藏0
  • 彻底弄懂ES6中Map和Set

    摘要:构造函数可以接受一个数组作为参数。本身是一个构造函数,用来生成数据结构。实例对象的属性返回实例的成员总数。返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。返回键值对的遍历器。使用回调函数遍历每个成员。Map Map对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。构造函数Map可以接受一个数组作为参数。 Map和Object的区别 一个Object 的键...

    赵春朋 评论0 收藏0

发表评论

0条评论

Labradors

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<