首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么集合的keys()值不等于Symbol.iterator,而kyes值等于Symbol.iterator

集合的keys()方法返回一个新的迭代器对象,该对象包含集合中的所有键。而Symbol.iterator是一个内置的Symbol值,它定义了一个默认的迭代器方法,用于返回集合中的所有元素。

虽然keys()方法和Symbol.iterator都可以用于遍历集合中的元素,但它们的返回结果是不同的。keys()方法返回的是一个迭代器对象,该对象的每个迭代值都是集合中的键,而Symbol.iterator返回的是一个迭代器对象,该对象的每个迭代值是一个包含键值对的数组,其中第一个元素是键,第二个元素是对应的值。

这两个方法的设计目的不同。keys()方法主要用于获取集合中的键,而Symbol.iterator方法则是用于实现集合的默认迭代器,可以通过调用集合的next()方法来遍历集合中的所有元素。

在实际应用中,可以根据具体的需求选择使用keys()方法还是Symbol.iterator方法。如果只需要获取集合中的键,可以使用keys()方法;如果需要同时获取键和对应的值,可以使用Symbol.iterator方法。

以下是腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent Real-Time Rendering):https://cloud.tencent.com/product/trr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

前端-Iterator:访问数据集合统一接口

1 正题 某个数据集合部署了 Iterator接口,是指其 Symbol.iterator属性指向一个能返回 Iterator接口函数。...任何默认使用遍历器访问数据集合方法,都会调用此属性以得到遍历器对象,再按照设定顺序依次访问该数据结构成员(关于 Symbol.iterator请看最后一节延伸阅读)。...其中 done是一个布尔,表示遍历是否结束,结束为 true,否则 false。 遍历器接口标准十分简洁,不提供诸如:操作内部指针、判断是否有等等方法。... throw方法主要是配合 Generator函数使用,一般遍历器对象用不到这个方法,所以不予介绍。...}); 对象没有默认遍历器接口 为什么对象没有默认遍历器接口?这要从两方面说明。一为遍历器是种线性处理结构,对于任何非线性数据结构,部署了遍历器接口,就等于部署一种线性转换。

68530

可以迭代大部分数据类型 for…of 为什么不能遍历普通对象?

可以看到,这些可被for of迭代对象,都实现了一个Symbol(Symbol.iterator)方法,普通对象没有这个方法。...简单来说,for of 语句创建一个循环来迭代可迭代对象,可迭代对象内部实现了Symbol.iterator方法,普通对象没有实现这一方法,所以普通对象是不可迭代。... iterator 遍历过程,则是类似 Generator 方式,迭代时不断调用next方法,返回一个包含value()和done属性(标识是否遍历结束)对象。...迭代器模式为遍历不同集合结构提供了一个统一接口,从而支持同样算法在不同集合结构上进行操作。 不难发现,Symbol.iterator实现就是一种迭代器模式。...集合对象内部实现了Symbol.iterator接口,供外部调用,而我们无需过多关注集合对象内部结构,需要处理集合对象内部数据时,我们通过for of调用Symbol.iterator接口即可。

1.1K30

迭代器与 for of使用和原理

,但有的时候不仅需要使用还需要使用索引,ES6 为数组、Map、Set 集合内建了以下三种迭代器: entries() 返回一个遍历器对象,用来遍历[键名, 键值]组成数组。...对于数组,键名就是索引keys() 返回一个遍历器对象,用来遍历所有的键名。values() 返回一个遍历器对象,用来遍历所有的键值。...而且每个集合类型都有一个默认迭代器,在 for-of 循环中,如果没有显式指定则使用默认迭代器。...数组和 Set 集合默认迭代器是 values() 方法,Map 集合默认迭代器是 entries() 方法。...之所以这么做,就要提到迭代器 return 方法。 引用阮一峰老师 ECMAScript 6 入门: 遍历器对象除了具有 next 方法,还可以具有 return 方法和 throw 方法。

1.4K30

【JS】230-迭代器与 for of使用和原理

,比如有的时候我们仅需要数组中,但有的时候不仅需要使用还需要使用索引,ES6 为数组、Map、Set 集合内建了以下三种迭代器: entries() 返回一个遍历器对象,用来遍历[键名, 键值]组成数组...对于数组,键名就是索引keys() 返回一个遍历器对象,用来遍历所有的键名。values() 返回一个遍历器对象,用来遍历所有的键值。...而且每个集合类型都有一个默认迭代器,在 for-of 循环中,如果没有显式指定则使用默认迭代器。...数组和 Set 集合默认迭代器是 values() 方法,Map 集合默认迭代器是 entries() 方法。...之所以这么做,就要提到迭代器 return 方法。 引用阮一峰老师 ECMAScript 6 入门: 遍历器对象除了具有 next 方法,还可以具有 return 方法和 throw 方法。

87841

ES6之Iterator

Iterator MDN:处理集合每个项是很常见操作。JavaScript 提供了许多迭代集合方法,从简单for循环到map()和filter()。...结果对象有两个属性:一个是value表示下一次返回,另一个是Boolean类型done,当没有更多可返回数据时返回true。迭代器对象内部本质其实就是存在一个指针,用来指向集合中值位置。...其中 done 表示遍历是否结束,value 返回当前遍历。 可迭代协议 Symbol....: 属性 必选 [Symbol.iterator] 返回一个对象无参函数,被返回对象符合迭代器协议 Y 如果让一个对象是可遍历,就要遵守可迭代协议,该协议要求对象要部署一个以 Symbol.iterator...为 key 键值对, value 就是一个无参函数,这个函数返回对象要遵守迭代器协议。

21420

ES6 系列之迭代器与 for of

,比如有的时候我们仅需要数组中,但有的时候不仅需要使用还需要使用索引,ES6 为数组、Map、Set 集合内建了以下三种迭代器: entries() 返回一个遍历器对象,用来遍历[键名, 键值]组成数组...对于数组,键名就是索引keys() 返回一个遍历器对象,用来遍历所有的键名。 values() 返回一个遍历器对象,用来遍历所有的键值。...而且每个集合类型都有一个默认迭代器,在 for-of 循环中,如果没有显式指定则使用默认迭代器。...数组和 Set 集合默认迭代器是 values() 方法,Map 集合默认迭代器是 entries() 方法。...之所以这么做,就要提到迭代器 return 方法。 引用阮一峰老师 ECMAScript 6 入门: 遍历器对象除了具有 next 方法,还可以具有 return 方法和 throw 方法。

48610

Iterator 和 for-of 循环

这样就有了四种数据集合,用户还可以组合使用它们,定义自己数据结构,比如数组成员是Map,Map成员是对象。这样就需要一种统一接口机制,来处理所有不同数据结构。...本质上,遍历器是一种线性处理,对于任何非线性数据结构,部署遍历器接口,就等于部署一种线性转换。...方法被修改了,所以扩展运算符(...)返回变成了bye,字符串本身还是hi。...其次,Set 结构遍历时,返回是一个 Map 结构遍历时,返回是一个数组,该数组两个成员分别为当前 Map 成员键名和键值。...对于数组,键名就是索引;对于 Set,键名与键值相同。Map 结构 Iterator 接口,默认就是调用entries方法。 keys() 返回一个遍历器对象,用来遍历所有的键名。

54720

别误会,Map不只是地图

上集说到ES6中set方法,在ES6中除了增加set方法之外,还考虑到一种场景——键值对存储,map集合就是专门存储多个键值对(key value pair)数据。...在map出现之前,我们使用是对象方式来存储键值对,键是属性名,是属性。键值对数据结合特点就是:键不可重复。...//但是,它要求每一次迭代结果必须是一个长度为2数组,数组第一项表示键,数组第二项表示 例:创建一个没有任何内容map集合 const mp = new Map(); console.log...对象是引用,它们地址不同,所以不会覆盖,a原值1会被abc覆盖掉。...== undefined; //不等于undefined,说明找到了 } //clear方法 clear() { this.

60240

介绍下 Set、Map、WeakSet 和 WeakMap 区别?

集合(Set) ES6 新增一种新数据结构,类似于数组,但成员是唯一且无序,没有重复。 Set 本身是一种构造函数,用来生成 Set 数据结构。...Set 内部判断两个是否不同,使用算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要区别是NaN等于自身,精确相等运算符认为NaN不等于自身。...WeakSet WeakSet 对象允许你将弱引用对象储存在一个集合中 WeakSet 与 Set 区别: WeakSet 只能储存对象引用,不能存放 Set 对象都可以 WeakSet 对象中储存对象都是被弱引用...字典(Map) 集合 与 字典 区别: 共同点:集合、字典 可以储存不重复 不同点:集合 是以 [value, value]形式储存元素,字典 是以 [key, value] 形式储存 const...WeakMap WeakMap 对象是一组键值对集合,其中键是弱引用对象,可以是任意。 注意,WeakMap 弱引用只是键名,不是键值。键值依然是正常引用。

1.6K20

es6 -- Iterator 和 for...of 循环

这样就有了四种数据集合,用户还可以组合使用它们,定义自己数据结构,比如数组成员是Map,Map成员是对象。这样就需要一种统一接口机制,来处理所有不同数据结构。...其中,value属性是当前成员,done属性是一个布尔,表示遍历是否结束。 下面是一个模拟 next 方法返回例子。...方法被修改了,所以扩展运算符(...)返回变成了bye,字符串本身还是hi。...其次,Set 结构遍历时,返回是一个 Map 结构遍历时,返回是一个数组,该数组两个成员分别为当前 Map 成员键名和键值。...对于数组,键名就是索引;对于 Set,键名与键值相同。Map 结构 Iterator 接口,默认就是调用entries方法。 keys() 返回一个遍历器对象,用来遍历所有的键名。

73040

ES6之Iterator遍历器

其实iterator在以前是内置在JavaScript中,主要是Array和Object表示集合数据结构使用。ES6新增了map和set数据结构,这样就有了四种数据集合。...就是返回一个包含value和done两个属性对象。value属性是当前成员,done属性是一个布尔,表示遍历是否结束。...属性名Symbol.iterator,它是一个表达式,返回Symbol对象iterator属性,这是一个预定义好、类型为 Symbol 特殊,所以要放在方括号内。...var str = 'abc'; for(var val of str){ console.log(val); } 有了for of,很多遍历操作都可以使用,配合entries、keys、values...,比如对象不能直接用for of遍历,我们可以用keys方法把对象键变成数组去遍历。

49440

ES6-标准入门·Iterator 和 for of 循环

Iterator 和 for of 循环 JavaScript 有四种表示“集合”和数据结构,分别是 Array、Object 和 ES6 新增 Set、Map,遍历器(Iterator)就是为各种不同数据结构提供统一访问机制接口...默认 Iterator 接口部署在 Symbol.iterator 属性上,调用 Symbol.iterator 方法,会得到当前数据结构默认遍历器生成函数。...本质上,遍历器是一种线性处理,对于任何非线性数据结构,部署遍历器接口就等于部署一种线性转换。...;其次,Set 结构遍历时返回是一个 Map 结构遍历时返回是一个数组,该数组两个成员分别为当前 Map 成员键名和键值。...一种解决方法是,使用 Object.keys 方法将对象键名生成一个数组,然后遍历这个数组: for (var key of Object.keys(someObject)) { console.log

29010

Iterator与Generator

ES6 规定默认 Iterator 接口部署在数据结构 Symbol.iterator 属性中,如果一个数据结构存在 Symbol.iterator 属性,则该数据结构可遍历。...本质上,遍历器是一种线性处理,对于任何非线性数据结构,部署遍历器接口,就等于部署一种线性转换。...next 方法参数yield 表达式本身没有返回,或者说总是返回 undefined。next 方法可以带一个参数,该参数就会被当作上一个 yield 表达式返回。...通过 next 方法参数,可以在 Generator 函数运行不同阶段,从外部向内部注入不同,从而调整函数行为。...由于 next 方法参数表示上一个 yield 表达式返回,所以在第一次使用 next 方法时,传递参数是无效

38330

一文彻底搞懂迭代器与生成器函数

在阅读本文之前,主要会从以下几点去探讨迭代器/生成器 迭代器是什么,想想为什么会有迭代器 生成器又是什么,它解决了什么样问题 以实际例子阐述迭代器与生成器 正文开始......Symbol.iterator方法,再调用返回next方法,最后得到当前 我们可以在控制台看下 数组是有这个Symbol.iterator属性 从以上迭代器特征中,我们可以得知,数组是通过一个...本质上是通过生成器对象prototypeSymbol.iterator连接了起来 生成器函数return 当我们在生成器函数内部return时,那么当调用next迭代完所有的时,继续调用next...控制多个函数按顺序执行 假设有一个场景,就是fn2依赖fn1结果决定是否是否执行,fn3依赖fn2状态是否继续执行,那怎么设计呢?...点个赞,在看,转发,收藏等于学会,欢迎关注Web技术学苑,好好学习,天天向上!

51020
领券