详解JS中你不知道的各种循环测速

详解JS中你不知道的各种循环测速

前言

在 JavaScript 中,循环是最常用的控制结构之一。不同类型的循环可能具有不同的性能,有时甚至会对程序的性能产生重大的影响。本文将介绍 JavaScript 中常见的各种循环类型,并通过实例演示其性能差异。

常见循环类型

for 循环

for 循环是 JavaScript 中最常见、最基本也是最容易理解的循环类型。它可以用来迭代数组和对象属性,通过迭代计数器来控制循环次数,如下代码所示:

for (let i = 0; i < arr.length; i++) {
  // 迭代 arr 数组
}

for...in 循环

for...in 循环用于迭代对象中的可枚举属性。该循环将依次迭代对象的每个可枚举属性,直到所有属性都被迭代结束。

for (let key in obj) {
  // 迭代对象 obj 的可枚举属性
}

for...of 循环

for...of 循环是 ES6 中新增的迭代器循环语句,用于迭代可迭代对象(如数组、Set、Map 等对象)。与 for 循环不同,for...of 语句不需要索引或计数器,直接依次取出迭代器返回的值,如下所示:

for (let item of arr) {
  // 迭代 arr 数组
}

forEach 循环

forEach 循环是数组提供的一个迭代器方法,它接受一个函数作为参数,该函数将依次对数组的每个元素执行一次。forEach 循环不能使用 break、continue 关键字停止循环,无法更改数组中的元素。

arr.forEach(function(item, index, array) {
  // 遍历数组 arr,item 是当前元素,index 是元素的索引,array 是数组本身
});

while 循环

while 循环是 JavaScript 中最常见的循环类型之一,它在循环体内部检查条件,只要条件满足,就一直执行循环体代码。

while (condition) {
  // 检查条件,满足则执行循环体代码
}

do...while 循环

do...while 循环与 while 循环类似,但它的循环体至少会被执行一次,然后再检查条件是否满足。

do {
  // 执行循环体代码
} while (condition);

性能测试

为了测试各种循环类型的性能,我们可以编写一个简单的代码片段,用于计算从 1 到 100000 的所有数字之和,如下所示:

// for 循环
let sum1 = 0;
for (let i = 1; i <= 100000; i++) {
  sum1 += i;
}
console.log(sum1);

// for...in 循环
let sum2 = 0;
for (let i in Array.from({ length: 100000 }, (x, i) => i + 1)) {
  sum2 += parseInt(i, 10) + 1;
}
console.log(sum2);

// for...of 循环
let sum3 = 0;
for (let i of Array.from({ length: 100000 }, (x, i) => i + 1)) {
  sum3 += i;
}
console.log(sum3);

// forEach 循环
let sum4 = 0;
let arr = Array.from({ length: 100000 }, (x, i) => i + 1);
arr.forEach((item) => {
  sum4 += item;
});
console.log(sum4);

// while 循环
let sum5 = 0;
let i = 1;
while (i <= 100000) {
  sum5 += i;
  i++;
}
console.log(sum5);

// do...while 循环
let sum6 = 0;
let j = 1;
do {
  sum6 += j;
  j++;
} while (j <= 100000);
console.log(sum6);

运行以上代码片段,我们可以得到各种循环类型的计算时间。在我的测试环境中(Chrome 95,Windows 10),for 循环的性能最好,而 for...in 循环性能最差。通过对多次运行测试得到的结果进行分析,我们可以得到以下结论:

  1. 在循环次数较少的情况下,各种循环的性能比较接近,差异不明显。
  2. 在循环次数较多的情况下,for 循环的性能优于其他循环类型,而 for...in 循环的性能最差,这是因为 for...in 循环需要获取每个属性的名称,存在一定的性能开销。
  3. 在迭代数组时,for 循环和forEach 循环的性能相似。
  4. 在需要迭代对象属性时,for...in 循环是最常见且应用广泛的迭代器。

总结

本文介绍了 JavaScript 中常见的各种循环类型,包括 for 循环、for...in 循环、for...of 循环、forEach 循环、while 循环和do...while 循环。而针对各种循环类型,我们通过实例演示了它们性能的差异。在实际开发中,我们应该根据实际情况选择适当的循环类型,以提高代码的性能和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JS中你不知道的各种循环测速 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 漫谈JS引擎的运行机制 你应该知道什么

    漫谈JS引擎的运行机制 你应该知道什么 什么是JS引擎 JS引擎是指运行JavaScript程序的解释器,它可以解析、执行JavaScript代码,并将其转换成计算机能够理解的语言。目前主流的JS引擎有V8、SpiderMonkey、Chakra等。 JS引擎的运行流程 JS引擎的运行流程通常可以分为以下几个步骤: 词法分析:将JavaScript代码解析成…

    JavaScript 2023年6月10日
    00
  • javascript js cookie的存储,获取和删除

    JavaScript Cookie是一种客户端存储技术,允许网站存储少量信息在客户端的浏览器中。以下是JavaScript Cookie的存储、获取和删除的详细攻略: 存储 为了存储Cookie,需要使用document.cookie属性。这个属性允许我们在客户端创建、读取和删除Cookie。以下代码展示了如何创建一个Cookie: document.coo…

    JavaScript 2023年6月11日
    00
  • 关于JavaScript的内存与性能问题解决汇总

    JavaScript内存与性能问题解决汇总 在Web开发中,优化JavaScript的内存与性能通常是开发者需要面对的挑战之一。本文将从两个方面进行探讨,分别是JavaScript内存管理以及性能调优。 JavaScript内存管理 自动垃圾回收(Garbage Collection) JavaScript是一种高级语言,在执行过程中会自动进行内存分配和回收…

    JavaScript 2023年5月28日
    00
  • js 获取json数组里面数组的长度实例

    获取JSON数组里面数组的长度可以使用JavaScript语言中的length属性,具体分为获取根数组长度和获取嵌套数组长度两种情况。 获取根数组长度 首先,需要使用JSON.parse()方法将JSON字符串解析成JavaScript对象。然后,通过对象的length属性获取根数组的长度。 示例代码如下所示: let jsonStr = ‘[{"…

    JavaScript 2023年5月27日
    00
  • javascript获取dom的下一个节点方法

    当我们需要获取一个DOM元素的下一个兄弟节点时,有以下两个方法: 方法一:使用nextSibling属性 DOM节点对象拥有一个nextSibling属性,该属性用于获取当前节点的下一个兄弟节点。需要注意的是,这个属性获取到的兄弟节点可能是文本节点、注释节点等。 // 获取 id 为 "test" 的元素的下一个兄弟节点 var test…

    JavaScript 2023年6月10日
    00
  • 多个js与css文件的合并方法详细说明

    针对“多个js与css文件的合并方法详细说明”,我给出以下的详细攻略。 1. 为什么要合并js与css文件 在网页中,通常需要导入多个js和css文件来实现各种功能,这会导致浏览器访问时需要发送多个请求,影响网页的加载速度。因此,我们可以通过合并一些常用的js和css文件,减少浏览器发送的请求次数,提高网页的载入速度。 2. 如何合并js与css文件 2.1…

    JavaScript 2023年5月27日
    00
  • jQuery实现批量判断表单中文本框非空的方法(2种方法)

    下面是详细的攻略: 一、背景说明 在Web开发中,经常需要对表单信息进行数据验证,比如判断某些必填项是否为空。本文将介绍两种使用jQuery实现批量判断表单中文本框非空的方法。 二、方法一 方法一利用each方法遍历表单中的文本框,然后判断每个文本框是否为空。示例代码如下: var flag = true; // 表单验证flag $(":text…

    JavaScript 2023年6月10日
    00
  • JavaScript中扩展Array contains方法实例

    下面是完整的攻略及示例。 扩展JavaScript中Array contains方法 在JavaScript中,Array原型对象已经提供了很多有用的方法,如push()、pop()、shift()、unshift()等。但是,有些时候我们可能需要自定义一些方法来满足特定的需求,而扩展contains()方法就是其中一个例子。 JavaScript中的Arr…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部