数组是可迭代的

var a = [];

console.dir(a);

发现这里有一个Symbol.iterator ,说明它是可迭代的。

object 是不可以迭代的

var a = {}

console.dir(a);

发现这里没有iterator

set

weakset

map

weakmap

这四种数据结构都是iterable

骚操作:

通过iterator.next()

多来几次:

再来一次,到undefined了就结束了

再次理解symbol:

https://developer.mozilla.org/zh-CN/docs/Glossary/Symbol

根据MDN官网描述,

数据类型 “symbol” 是一种原始数据类型,该类型的性质在于这个类型的值可以用来创建匿名的对象属性(注:是对象。也就是之前都认为object,js中object的属性一般只能是string类型,其实这里还能使Symbol类型)。该数据类型通常被用作一个对象属性的键值,当这个属性是用于类或对象类型的内部使用的时候。

是不是懂了一些...

Symbol('12') !== Symbol('12')  //true

var obj = {Symbol('a'):123}

再继续看MDN的文档:

Symbol可以用来实现匿名属性。

Object.entries:

Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组(就是一个二维数组,这个二维数组对应着key-value值),其排列与使用 for.key..in .. 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。

for..in有一个缺陷就是顺序是依赖于执行环境的,不一定按数组的索引顺序,如果对于很重要的数组,要用foreach来循环(来自MDN原话)。

经过查询资料,for..key..in..的顺序是这样的

所谓的这个顺序,其实也就是在浏览器里打印这个对象时候你看的那个key的顺序。

for  .. value..of .. 只能用在iterable对象上,所以for...value..of是不能给object来使用的,Object.entries返回的是一个iterable的键值对数组。

可以这样用:

最新文章

  1. jQuery最佳实践
  2. Lucene中几种常用的Query
  3. html空格小结
  4. Nginx+uWSGI+Django+Python+ MySQL 搭建可靠的Python Web服务器
  5. rpm 与压缩解压缩
  6. js兼容多浏览器的关闭当前页面
  7. 中科红旗倒下,谁来挑战windows
  8. Android 国际化字符串资源,各语言目录表及从字符串资源文件读字符方法
  9. FineUI登入的例子中遇到的一些问题
  10. 如何优雅的输出PHP调试信息
  11. OC - 10.使用Quartz2D绘制个性头像
  12. XHTML 结构化:使用 XHTML 重构网站
  13. java从c struct传来的字节数组中取值
  14. 学习笔记 Android.mk 搜索自己主动
  15. spring整合mybatis,批量扫描mapper接口出现异常
  16. python selectsort
  17. 关于nginx安装的收藏
  18. pom.xml文件释义
  19. PAT乙级题:1003我要通过!
  20. 【腾讯云的1001种玩法】 Laravel 整合万向优图图片管理能力,打造高效图片处理服务

热门文章

  1. TensorFlow初学
  2. Python3.7中的常用关键字
  3. to_string函数(将数字转换成字符串)
  4. Iterator与Asyc/Await的实现
  5. BZOJ 3282 Link Cut Tree (LCT)
  6. 2019-03-15 使用Request POST获取中加基金的PDF文件,并下载到本地
  7. com.alibaba.fastjson.JSONPathException: expect '], but 'y'
  8. mysql字符集修改(ubuntu)
  9. Swift的构造和析构过程
  10. Xamarin部署时遇到错误: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]