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

yizhihongxing

详解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模仿php中strtotime()与date()函数实现方法

    下面我来详细讲解 “js模仿php中strtotime()与date()函数实现方法”的攻略。 1. 背景介绍 在PHP语言中,有两个非常常用的日期函数,分别是strtotime()和date()函数。strtotime()函数可以将任意字符串格式的日期转换为UNIX timestamp时间戳;而date()函数则可以将UNIX timestamp格式的时间…

    JavaScript 2023年5月27日
    00
  • JS 文件传参及处理技巧分析

    JS文件传参及处理技巧分析 在JavaScript中,文件传参是一个非常常见的操作,尤其是在web开发中。在本文中,我们将介绍文件传参的一些技巧和处理方法。 传统方式:URL参数传递 在web开发中,最常见的文件传参方式是通过URL参数传递。这种方式将参数作为URL的一部分,通常被称为GET方式。以下是一个典型的URL参数的例子: http://exampl…

    JavaScript 2023年5月27日
    00
  • Javascript Date toLocaleTimeString() 方法

    以下是关于JavaScript Date对象的toLocaleTimeString()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的toLocaleTimeString()方法 JavaScript的toLocaleTimeString()方法返回一个表示对象时间部分本地化字符串,该字符串格式根据本地设置而定。该方法可以接受一个或多…

    JavaScript 2023年5月11日
    00
  • 详谈js遍历集合(Array,Map,Set)

    我来为你讲解如何用JavaScript遍历集合。 集合的遍历 在遍历集合之前,首先需要了解集合类型的基本特性。 JavaScript中常见的集合类型有Array、Map和Set。其中: Array是一种有序、可重复的数据集合,它可以通过下标或迭代器来访问其中的元素。 Map是一种关联数组,它保存了键值对,并且键可以是任意类型的数据,而值可以是任意类型的数据。…

    JavaScript 2023年5月27日
    00
  • C#使用正则表达式抓取网站信息示例

    下面我将为你详细讲解“C#使用正则表达式抓取网站信息示例”的完整攻略。 1. 背景 当我们需要从网站上获取特定信息时,我们可以使用正则表达式来找到需要的内容。在 C# 中,可以使用 System.Text.RegularExpressions 命名空间来实现正则表达式的匹配。 2. 正则表达式基础知识 在使用正则表达式之前,我们需要了解一些基本概念: 字符集…

    JavaScript 2023年5月19日
    00
  • 疯掉了,尽然有js写的操作系统

    关于“疯掉了,竟然有JS写的操作系统”,我可以提供以下攻略。 什么是“JS操作系统” “JS操作系统”实际上是基于浏览器的操作系统,使用前端技术进行开发,其核心思想是JavaScript虚拟机和Web浏览器的结合。在这种操作系统中,所有IED编写的HTML、CSS和JavaScript均可作为应用程序运行。 如何搭建“JS操作系统” 1. 安装Node.js…

    JavaScript 2023年5月27日
    00
  • JS Generator函数yield表达式示例详解

    JS Generator函数yield表达式示例详解 什么是JS Generator函数 JS Generator函数是另一种可以从函数中提供多个值的方法。Generator函数使用yield关键字来定义生成器函数体内的多个值。当调用生成器函数时,会返回一个迭代器对象,使用此对象可以使用next()方法从函数中提取这些值。 以下是JS Generator函数…

    JavaScript 2023年6月11日
    00
  • Android WebView与JS交互全面详解(小结)

    下面我来为你详细讲解“Android WebView与JS交互全面详解(小结)”的完整攻略。 了解Android WebView和JS交互的基本概念 在开始介绍Android WebView与JS交互的具体内容前,我们需要先了解一些基础概念: WebView:Android中的一个内置控件,提供了一个用于显示web界面的View。WebView可以加载网页上…

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