全面解析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 相关文章推荐
jQuery 1.0.2
Oct 11 Javascript
通过javascript把图片转化为字符画
Oct 24 Javascript
jquery插件jTimer(jquery定时器)使用方法
Dec 23 Javascript
JavaScript学习心得之概述
Jan 20 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
May 03 Javascript
关于vue.js组件数据流的问题
Jul 26 Javascript
详解使用angular的HttpClient搭配rxjs
Sep 01 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
Mar 15 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
Jul 01 Javascript
如何通过vscode运行调试javascript代码
Jul 24 Javascript
如何在vue 中引入使用jquery
Nov 10 jQuery
jquery插件实现搜索历史
Apr 24 jQuery
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写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP 七大优势分析
2009/06/23 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
python开发中range()函数用法实例分析
2015/11/12 Python
python生成器表达式和列表解析
2016/03/10 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
浅析python的Lambda表达式
2019/02/27 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
应用电子专业学生的自我评价
2013/10/16 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
党支部特色活动方案
2014/08/20 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL