全面解析JavaScript里的循环方法之forEach,for-in,for-of


Posted in Javascript onApril 20, 2020

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的:

for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}

自从JavaScript5起,我们开始可以使用内置的 forEach 方法:

myArray.forEach(function (value) {
console.log(value);
});

写法简单了许多,但也有短处:你不能中断循环(使用语句或使用语句。

JavaScript里还有一种循环方法:。

for-in循环实际是为循环”enumerable“对象而设计的:

var obj = {a:1, b:2, c:3};
for (var prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
// 输出:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

你也可以用它来循环一个数组:

for (var index in myArray) { // 不推荐这样
console.log(myArray[index]);
}

不推荐用for-in来循环一个数组,因为,不像对象,数组的 index 跟普通的对象属性不一样,是重要的数值序列指标。

总之, for ? in 是用来循环带有字符串key的对象的方法。

for-of循环

JavaScript6里引入了一种新的循环方法,它就是for-of循环,它既比传统的for循环简洁,同时弥补了forEach和for-in循环的短板。

我们看一下它的for-of的语法:

for (var value of myArray) {
console.log(value);
}

for-of的语法看起来跟for-in很相似,但它的功能却丰富的多,它能循环很多东西。

for-of循环使用例子:

let iterable = [10, 20, 30];
for (let value of iterable) {
console.log(value);
}
// 10
// 20
// 30

我们可以使用来替代,这样它就变成了在循环里的不可修改的静态变量。

let iterable = [10, 20, 30];
for (const value of iterable) {
console.log(value);
}
// 10
// 20
// 30

循环一个字符串:

let iterable = "boo";
for (let value of iterable) {
console.log(value);
}
// "b"
// "o"
// "o"
let iterable = new Uint8Array([0x00, 0xff]);
for (let value of iterable) {
console.log(value);
}
// 0
// 255
let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);
for (let [key, value] of iterable) {
console.log(value);
}
// 1
// 2
// 3
for (let entry of iterable) {
console.log(entry);
}
// [a, 1]
// [b, 2]
// [c, 3]
let iterable = new Set([1, 1, 2, 2, 3, 3]);
for (let value of iterable) {
console.log(value);
}
// 1
// 2
// 3

循环一个 DOM collection

循环一个DOM collections,比如 NodeList ,之前我们讨论过 如何循环一个NodeList ,现在方便了,可以直接使用for-of循环:

// Note: This will only work in platforms that have
// implemented NodeList.prototype[Symbol.iterator]
let articleParagraphs = document.querySelectorAll("article > p");
for (let paragraph of articleParagraphs) {
paragraph.classList.add("read");
}

循环一个拥有enumerable属性的对象

for?of循环并不能直接使用在普通的对象上,但如果我们按对象所拥有的属性进行循环,可使用内置的Object.keys()方法:

for (var key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
}

循环一个生成器(generators)

我们可循环一个生成器(generators):

function* fibonacci() { // a generator function
let [prev, curr] = [0, 1];
while (true) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
for (let n of fibonacci()) {
console.log(n);
// truncate the sequence at 1000
if (n >= 1000) {
break;
}
}

到此这篇关于全面解析JavaScript里的循环方法之forEach,for-in,for-of的文章就介绍到这了,更多相关js循环方法foreach for in for of内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript/jQuery 表单美化插件小结
Feb 14 Javascript
原生javascript实现addClass,removeClass,hasClass函数
Feb 25 Javascript
JavaScript实现数据类型的相互转换
Mar 06 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
Jul 13 Javascript
js中url对象化管理分析
Dec 29 Javascript
JS实现调用本地摄像头功能示例
May 18 Javascript
vuex如何重置所有state(可定制)
Jan 17 Javascript
javascript中数组的常用算法深入分析
Mar 12 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
Jun 13 Javascript
layui实现二维码弹窗、并下载到本地的方法
Sep 25 Javascript
推荐几个不错的console调试技巧实现
Dec 20 Javascript
vue中echarts引入中国地图的案例
Jul 28 Javascript
Javascript之Date对象详解
Jun 07 #Javascript
批量下载对路网图片并生成html的实现方法
Jun 07 #Javascript
javascript之Boolean类型对象
Jun 07 #Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 #Javascript
javascript之Array 数组对象详解
Jun 07 #Javascript
JavaScript语言精粹经典实例(整理篇)
Jun 07 #Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
Jun 07 #Javascript
You might like
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
oracle资料库函式库
2006/10/09 PHP
PHP实现Socket服务器的代码
2008/04/03 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
详解js类型判断
2018/05/22 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
python实现电子词典
2020/04/23 Python
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
兼职学生的自我评价
2013/11/24 职场文书
法律专业求职信
2014/05/24 职场文书
教师个人事迹材料
2014/12/17 职场文书
入党个人总结范文
2015/03/02 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python