JavaScript高级数据类型之iterable

简介: 引入对JavaScript有过一定了解的人都知道,array是可以用下标循环进行遍历的,因为每个array中的元素都具有其隐藏的索引(即我们上面理解的下标)。但是经过前两天的学习,我们知道Map是一种高级的对象,相对于普通对象,map的键可以是任意值(比如数值Number)

引入


对JavaScript有过一定了解的人都知道,array是可以用下标循环进行遍历的,因为每个array中的元素都具有其隐藏的索引(即我们上面理解的下标)。

但是经过前两天的学习,我们知道Map是一种高级的对象,相对于普通对象,map的键可以是任意值(比如数值Number)

那么有没有高级的array,可以允许我们对其进行遍历?

今天我们就来了解一下iterable这一类型


1.什么是iterable


先回答一下我们上面粗体的问题:

很遗憾,js没有设置一个单独的高级的array来满足我们遍历的要求

因为js有更好的解决办法:

ES6标准中,js引入了iterable这一类型,包括了array、map、set等看上去像是“一个数据序列”的类型

这些interable类型的数据都可以用for of来遍历:


2. for...of循环


我们以一个具体的例子来说明for of循环的用法:

var a = ['1', '2', '3'];
for (var x of a) { // 遍历Array
    console.log(x);
}


我们先声明一个变量a,a中包含了"1","2","3"三个字符串

紧接着我们用for var x of a 来定义一个x,这就是我们遍历的迭代变量,之后x便会从头一个个变为a中的值

也就是变成“1”、“2”、“3”并推动着进行第一次第二次第三次循环

每次循环执行代码块console.log(x)来把x的值用日志的方式打印出来。

同理用在map和set类型的数据上也是这样:


var s = new Set(['1', '2', '3']);
var m = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);
for (var x of s) { // 遍历Set
    console.log(x);
}
for (var x of m) { // 遍历Map
    console.log(x[0] + '=' + x[1]);//输出键值对
}


3。探讨for of 和for in 的区别


除了上面所说的,map和set不能采用下标循环来迭代之外,for in和for of还有一个非常不一样的地方——

for in会遍历对象的每个属性名称

array本身也是一个对象,他除了有元素之外,还有本身自带的属性。就拿前面的a为例,a作为array包含了"1"、"2"、"3"三个元素。但是如果从更底层的方面来理解,把a看作一个普通的对象,给a增加一个属性,那么for in就会把这个属性也当作一个元素:

var a = ['1', '2', '3'];
a.name = 'juejin';
for (var x in a) {
    console.log(x); // '0', '1', '2', 'name'
}


如上,我们新加的name也被算进去了。

但是我们采用for of就不会出现这样的情况.并且返回的不是元素的下标(索引)而是元素本身

相关文章
|
22天前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
132 59
|
2月前
|
JavaScript
js基础数据类型
js基础数据类型
28 1
|
15天前
|
存储 前端开发 JavaScript
前端基础(三)_JavaScript数据类型(基本数据类型、复杂数据类型)
本文详细介绍了JavaScript中的数据类型,包括基本数据类型(Number、String、Boolean、Undefined、Null)和复杂数据类型(Object),并解释了如何使用`typeof`操作符来识别变量的数据类型。同时,还讨论了对象、函数和数组等复杂数据类型的使用方式。
16 2
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-基本数据类型和引用数据类型
关于JavaScript基础知识的文章,主要介绍了基本数据类型和引用数据类型。
34 2
JavaScript基础知识-基本数据类型和引用数据类型
|
2月前
|
JavaScript 前端开发
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
这篇文章是JavaScript基础与实战教程的第一部分,涵盖了JavaScript的基本语法、标识符、数据类型以及如何进行强制类型转换,通过代码示例介绍了JS的输出语句、编写位置和数据类型转换方法。
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
|
2月前
|
开发者 图形学 开发工具
Unity编辑器神级扩展攻略:从批量操作到定制Inspector界面,手把手教你编写高效开发工具,解锁编辑器隐藏潜能
【8月更文挑战第31天】Unity是一款强大的游戏开发引擎,支持多平台发布与高度可定制的编辑器环境。通过自定义编辑器工具,开发者能显著提升工作效率。本文介绍如何使用C#脚本扩展Unity编辑器功能,包括批量调整游戏对象位置、创建自定义Inspector界面及项目统计窗口等实用工具,并提供具体示例代码。理解并应用这些技巧,可大幅优化开发流程,提高生产力。
138 1
|
2月前
|
JavaScript 前端开发
JS常用数据类型转换(数字型和字符串型之间转换)
JS常用数据类型转换(数字型和字符串型之间转换)
48 2
|
2月前
|
前端开发 JavaScript
Web 前端大揭秘!JS 数据类型检测竟如此震撼,一场惊心动魄的代码探秘之旅等你来!
【8月更文挑战第23天】在Web前端开发中,合理检测数据类型至关重要。JavaScript作为动态类型语言,变量类型可在运行时变化,因此掌握检测技巧十分必要。
27 1
|
2月前
|
存储 前端开发 JavaScript
Web前端的奇幻之旅:探索JS数据类型的奥秘与差异
【8月更文挑战第23天】JavaScript是一种动态类型语言,提供多种内置数据类型支持信息的存储与操作。这些类型对Web前端开发者至关重要,直接影响代码性能与可读性。JavaScript数据类型主要分为两大类:原始数据类型(如Undefined、Null、Boolean等)与引用数据类型(如Object、Array等)。原始类型直接存储值,而引用类型存储指向数据的引用。原始类型不可变且存储在栈中,访问更快;引用类型则存储在堆中,可通过其引用进行修改。理解这些差异有助于编写高效、可维护的代码。
34 0
|
2月前
|
存储 JavaScript 前端开发
JavaScript引用数据类型和构造函数的秘密
JavaScript引用数据类型和构造函数的秘密