全面解析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 相关文章推荐
window.opener用法和用途实例介绍
Aug 19 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
Nov 07 Javascript
javascript实现回车键提交表单方法总结
Jan 10 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
手机端页面rem宽度自适应脚本
May 20 Javascript
Bootstrap 源代码分析(未完待续)
Aug 17 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
vue axios数据请求及vue中使用axios的方法
Sep 10 Javascript
小程序云开发实战小结
Oct 25 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
May 17 jQuery
Vue实现回到顶部和底部动画效果
Jul 31 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
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
计数器详细设计
2006/10/09 PHP
php根据年月获取季度的方法
2014/03/31 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
css图片自适应大小
2007/11/28 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
讲解Python中的递归函数
2015/04/27 Python
python 实时遍历日志文件
2016/04/12 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
django中模板的html自动转意方法
2018/05/27 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python打开windows应用程序的实例
2019/06/28 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
python 实现多维数组(array)排序
2020/02/28 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
小学教师评语大全
2014/04/23 职场文书
在Django中使用MQTT的方法
2021/05/10 Python