全面解析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 相关文章推荐
比较全的JS checkbox全选、取消全选、删除功能代码
Dec 19 Javascript
jquery.cookie.js使用指南
Jan 05 Javascript
JS选取DOM元素的简单方法
Jul 08 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
三种方式实现瀑布流布局
Feb 10 Javascript
javascript自执行函数
Feb 10 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
Jun 14 Javascript
vue select选择框数据变化监听方法
Aug 24 Javascript
ES6 系列之 Generator 的自动执行的方法示例
Oct 19 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
JS执行控制之节流模式实例分析
2018/12/21 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
python中的随机函数小结
2018/01/27 Python
使用matplotlib画散点图的方法
2018/05/25 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Python实现简单的2048小游戏
2021/03/01 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
优秀士兵先进事迹
2014/02/06 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
工会换届选举方案
2014/05/21 职场文书
国庆宣传标语
2014/06/30 职场文书
作风整顿剖析材料
2014/09/30 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技