forEach 循环

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


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

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


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

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

for…in 循环

JavaScript里还有一种循环方法:for...in。
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 循环使用例子:

循环一个数组(Array):


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

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


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"

循环一个类型化的数组(TypedArray):


let iterable = new Uint8Array([0x00, 0xff]); for (let value of iterable) {
console.log(value);
}
// 0
// 255

循环一个Map:


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]

循环一个 Set:


let iterable = new Set([1, 1, 2, 2, 3, 3]); for (let value of iterable) {
console.log(value);
}
// 1
// 2
// 3

循环一个 DOM 集合
循环一个 DOM 集合,比如 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");
}

循环一个拥有可枚举属性的对象
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;
}
}

来源:https://segmentfault.com/a/1190000017573641

javascript遍历方法总结的更多相关文章

  1. JavaScript 数组遍历方法的对比

    JavaScript 发展至今已经发展出多种数组的循环遍历的方法,不同的遍历方法运行起来那个比较快,不同循环方法使用在那些场景,下面将进行比较: 各种数组遍历的方法 for 语句 ,,,] , len ...

  2. javascript数组常用的遍历方法

    本篇文章给大家带来的内容是关于javascript数组常用的遍历方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 本文主要介绍数组常见遍历方法:forEach.m ...

  3. JavaScript 中的12种循环遍历方法

    原文:JavaScript 中的12种循环遍历方法 题目:请介绍 JavaScript 中有哪些循环和遍历的方法,说说它们的应用场景和优缺点? 1.for 循环 let arr = [1,2,3];f ...

  4. JavaScript中,数组和对象的遍历方法总结

    循环遍历是写程序很频繁的操作,JavaScript 提供了很多方法来实现. 这篇文章将分别总结数组和对象的遍历方法,新手可以通过本文串联起学过的知识. 数组遍历 方法一:for 循环 for 循环是使 ...

  5. JavaScript、jQuery、fish的遍历方法(each、forEach)总结

    起因 在工作中,需要在遍历的dom中找到第一个并做下操作然后退出遍历,我首先想到了用each方法,但由于无论是公用的jQuery组件还是公司的fish组件.我都忘记了怎么去退出遍历,所以就有了这篇帖子 ...

  6. JavaScript遍历对象方法总结

    前言 本篇内容将按照下图展开: 遍历Object Object最常见的遍历方法方法就是使用for...in...,但其有一定的局限性,比如只能遍历可枚举属性.虽然Object无法直接使用for循环和f ...

  7. Jquery中each的三种遍历方法

    Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...

  8. JavaScript遍历对象-总结一

    原生JavaScript 遍历 1.for 循环遍历 let array1 = ['a','b','c']; for (let i = 0;i < array1.length;i++){ con ...

  9. javaScript遍历对象、数组总结(转载)

    javaScript遍历对象.数组总结  转载来源 https://www.cnblogs.com/chenyablog/p/6477866.html 在日常工作过程中,我们对于javaScript遍 ...

随机推荐

  1. 介绍几个关于C/C++程序调试的函数

    最近调试程序学到的几个挺有用的函数,分享一下,希望对用C/C++的朋友有所帮助! 1. 调用栈系列下面是函数原型: 1 2 3 4 #include "execinfo .h" i ...

  2. MVC4笔记 @functions @model @using

    /////@functions自定义函数////// @helper辅助方法的确可以很方便的完成辅助方法开发,不过却失去了一些弹性,例如,无法在@helper中自定义属性,只能单纯的传入参数,然后格式 ...

  3. ejs判断变量是否为空并输出

    在ejs里输出变量如下: <%=errmsg%> 但如果errmsg变量不存在则会报错:errmsg is undefined 我们可以改为: <%=locals.errmsg || ...

  4. mysql常用的优化措施

    http://www.cnblogs.com/ggjucheng/archive/2012/11/07/2758058.html

  5. “System.OutOfMemoryException”类型的未经处理的异常在 mscorlib.dll 中发生

    在VS中写程序遇到这样的问题.但数据规模小的时候不出现,但数据规模大的时候就出现.但我的电脑用32G内存.处理的文本也不是很多,在文本alignment时出错.

  6. mybatis学习目录

    mybatis详解动态SQL https://www.cnblogs.com/ysocean/p/7289529.html mybatis查询时间段sql语句 http://www.cnblogs.c ...

  7. Sleep 和 Wait 关于锁释放的区别

    sleep和wait的区别是一个老生常谈的问题.Sleep 是 Thread类的方法, wait是Object类的方法.但是关键的区别是对锁的操作问题. 当我们调用sleep的时候,线程进入休眠,但是 ...

  8. bootstrap-table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)

    1.bootstrap-table 单击单行选中 $('#gzrwTable').on('click-row.bs.table', function(e, row, $element) { $('.s ...

  9. mysql在控制台里出现中文问号问题

    由于重装了wampserver,之前遇到的问题统统会重新出现,那么今天遇到的是在mysql控制台中,在表里输入中文数据,却出现问号的问题: 那么这个就跟编码有关系了,那么,我们就去wampserver ...

  10. failed: No module named 'catkin_pkg' Make sure that you have installed "catkin_pkg"

    https://stackoverflow.com/questions/43024337/why-this-error-when-i-try-to-create-workspaces-in-ros# ...