广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >JavaScript中循环之间的技术差异是怎样的
  • 301
分享到

JavaScript中循环之间的技术差异是怎样的

2024-04-02 19:04:59 301人浏览 安东尼
摘要

本篇文章为大家展示了javascript中循环之间的技术差异是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在 JavaScript 中使用循环时,需要理解两

本篇文章为大家展示了javascript中循环之间的技术差异是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在 JavaScript 中使用循环时,需要理解两个关键点:可枚举的属性和可迭代的对象。

可枚举的属性

可枚举对象的一个定义特征是,当通过赋值操作符向对象分配属性时,我们将内部 enumerable 标志设置为true,这是默认值。

当然,我们可以通过将其设置为false来更改此行为。

要点:可枚举的属性都可以用for...in 遍历出来。

举个例子看看:

// 会出现在 for ... in 循环中 const gbols = {}; gbols.platfORM = "LogRocket";  Object.getOwnPropertyDescriptor(gbols, "platform");  // {value: "LogRocket", writable: true, enumerable: true, configurable: true}  for (const item in gbols) {    console.log(item) } // platform   // 不会出现在 for ... in 循环中 // 将 enumerable 设置为 false Object.defineProperty(gbols, 'role', {value: 'Admin', writable: true, enumerable: false})  for (const item in gbols) {   console.log(item) } // platform

可迭代的对象

如果一个对象定义了它的迭代行为,那么它就是可迭代的。在这种情况下,将在for  …of构造中循环的值将定义其迭代行为。可迭代的内置类型包括Arrays、Strings、Sets和Maps 。object  是不可迭代的,因为它没有指定@iterator method。

在Javascript中,所有可迭代都是可枚举的,但不是所有的可枚举都是可迭代的。

for …in在数据中查找对象,而for ..of查找重复序列。来个例子看看:

const authors = ['小智', '小王', '小明', '小红'];  // 与 for in 循环一起使用 fro (const author in authors) {   console.log(author) }  // 打印: 0,1,2,3  for (const author of authors) {   console.log(author) }  // 打印:小智  小王  小明   小红

使用此构造时,需要牢记的是,如果调用了 typeof 得到的类型是 object,则可以使用for…in循环。

我们来看一下对authors变量的操作:

typeof authors  // 打印的是 “object”,因此我们可以使用`for ..in`

乍一看感觉有点奇怪,但必须注意,数组是一种特殊的对象,它以索引为键。for ...in循环找到对象时,它将循环遍历每个键。

for …in 遍历 authors 数组的方式可以用下面显式化的方式来理解:

const authors = {   0: 'Jade',   1: 'Dafe',   2: 'Gbols',   3: 'Daniel' }

重要说明:如果可以追溯到对象(或从对象原型链继承它),因为for …in将以不特定的顺序遍历键。

同时,如果实现 for.. of 构造的迭代器,则它将在每次迭代中循环遍历该值。

ForEach 和 map 方法

尽管可以使用forEach和map方法来实现相同的目标,但是它们的行为和性能方面存在差异。

基础层面上,当函数被调用时,它们都接收一个回调函数作为参数。

考虑下面的代码片段:

const scoresEach = [2,4 ,8, 16, 32]; const scoresMap = [2,4 ,8, 16, 32]; const square = (num) => num * num;

我们逐一列出其操作上的一些差异。

forEach返回undefined,而map返回一个新数组:

let newScores = [] const resultWithEach = scoresEach.forEach((score) => { const newScore = square(score); newScores.push(newScore); }); const resultWithMap = scoresMap.map(square);  console.log(resultWithEach) // undefined console.log(resultWithMap) // [4, 16, 64, 256, 1024]

map是一个纯函数,而forEach则执行一些更改:

console.log(newScores) // [4, 16, 64, 256, 1024]

在我看来,map倾向于函数式编程范例。与forEach不同的是,我们并不总是需要执行一次更改来获得想要的结果,在forEach中,我们需要对newscore变量进行更改。在每次运行时,当提供相同的输入时,map函数将产生相同的结果。同时,forEach对应项将从最后一次更改的前一个值中获取数据。

链式

map可以使用链式操作,因为map返回的结果是一个数组。因此,可以立即对结果调用任何其他数组方法。换句话说,我们可以调用filter, reduce,  some等等。对于forEach,这是不可能的,因为返回的值是undefined。

性能

map 方法的性能往往优于forEach方法。

检查用map和forEach实现的等效代码块的性能。平均而言,map函数的执行速度至少要快50%。

注意:此基准测试取决于你使用的计算机以及浏览器的实现。


在上面讨论的所有循环结构中,为我们提供最多控制的是for..of的循环。我们可以将它与关键字return、continue和break一起使用。这意味着我们可以指定我们希望对数组中的每个元素发生什么,以及我们是想早点离开还是跳过。

上述内容就是JavaScript中循环之间的技术差异是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网VUE频道。

--结束END--

本文标题: JavaScript中循环之间的技术差异是怎样的

本文链接: https://www.lsjlt.com/news/82374.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中循环之间的技术差异是怎样的
    本篇文章为大家展示了JavaScript中循环之间的技术差异是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在 JavaScript 中使用循环时,需要理解两...
    99+
    2022-10-19
  • 详细谈谈JavaScript中循环之间的差异
    目录前言可枚举的属性可迭代对象在 forEach 与 map 方法链式调用性能结论前言 在 JavaScript 中使用循环时,需要正确定义两个关键内容:可枚举属性(enumerab...
    99+
    2022-11-12
  • Ajax中同步与异步之间的区别分别是怎样的
    Ajax中同步与异步之间的区别分别是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。请求方式,分为GET与POST: GET 最为常见的H...
    99+
    2022-10-19
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作