当前位置: 首页 > Web前端 > JavaScript

JavaScript中循环之间的技术差异概述

时间:2023-03-26 22:31:21 JavaScript

作者:GbolahanOlagunju译者:前端小智来源:博客有梦想,有干货,微信搜索【大千世界】关注这个洗碗盘的清晨智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。在JavaScript中使用循环时,需要理解两个关键点:可枚举属性和可迭代对象。可枚举属性可枚举对象的定义特征是,当通过赋值运算符将属性分配给对象时,我们将内部可枚举标志设置为true,这是默认值。当然,我们可以通过将其设置为false来更改此行为。要点:可以用for...in遍历可枚举属性。例如,://会出现在for...in循环中writable:true,enumerable:true,configurable:true}for(constitemingbols){console.log(item)}//platform//不会出现在for...in循环中//setenumerableisfalseObject.defineProperty(gbols,'role',{value:'Admin',writable:true,enumerable:false})for(constitemingbols){console.log(item)}//平台可迭代对象if一个对象是可迭代的if它定义了它的迭代行为。在这种情况下,将在for...of构造中循环的值将定义其迭代行为。可迭代的内置类型包括数组、字符串、集合和映射。对象不可迭代,因为它没有指定@iterator方法。在Javascript中,所有可迭代对象都是可枚举对象,但并非所有可枚举对象都是可迭代对象。for...in查找数据中的对象,而for..of查找重复序列。我们来看一个例子:constauthors=['小智','小王','小明','小红'];//frowithforinloop(constauthorinauthors){console.log(author)}//print:0,1,2,3for(constauthorofauthors){console.log(author)}//print:XiaozhiXiaowangXiaomingXiaohong在使用这个结构的时候需要注意如果调用Iftypeof得到的类型是object,可以使用for...in循环。我们看一下authors变量的操作:typeofauthors//打印出“object”,所以我们可以用`for..in`乍一看好像有点奇怪,但是必须注意,数组是一个特殊对象,它由索引键控。当for...in循环找到对象时,它会遍历每个键。for...in遍历authors数组的方式可以通过以下显式方式理解:constauthors={0:'Jade',1:'Dafe',2:'Gbols',3:'Daniel'}重要注意:如果它可以追溯到对象(或从对象原型链继承它),因为for...in将不按特定顺序迭代键。同时,如果您实现一个用for..of构造的迭代器,它将在每次迭代时循环遍历该值。ForEach和map方法虽然forEach和map方法可用于实现相同的目标,但它们的行为和性能存在差异。在基本层面上,当函数被调用时,它们都接收一个回调函数作为参数。考虑以下代码片段:constscoresEach=[2,4,8,16,32];constscoresMap=[2,4,8,16,32];constsquare=(num)=>num*num;列出它们在操作上的一些差异。forEach返回未定义,而map返回一个新数组:constresultWithMap=scoresMap.map(square);console.log(resultWithEach)//undefinedconsole.log(resultWithMap)//[4,16,64,256,1024]map是一个纯函数,而forEach执行一些更改:console.log(newScores)//[4,16,64,256,1024]在我看来,map倾向于函数式编程范式。与我们并不总是需要执行更改以获得所需结果的forEach不同,在forEach中,我们需要对newscore变量进行更改。在每次运行时,map函数在给定相同输入时将产生相同的结果。同时,forEach对应方将从最后更改的先前值中获取数据。链式映射可以使用链式操作,因为映射返回的结果是一个数组。因此,可以根据结果立即调用任何其他数组方法。换句话说,我们可以调用filter、reduce、some等。ForEach这是不可能的,因为返回值是未定义的。性能map方法的性能往往优于forEach方法。检查使用map和forEach实现的等效代码块的性能。平均而言,map函数的执行速度至少提高了50%。注意:此基准取决于您使用的计算机和浏览器的实现。总结在上面讨论的所有循环结构中,给我们最多控制权的是for..of循环。我们可以将它与关键字return、continue和break一起使用。这意味着我们可以指定我们希望数组中的每个元素发生什么,以及我们是想提前离开还是跳过。原文:https://medium.com/better-pro...代码部署后可能出现的bug无法实时获知。之后为了解决这些bug,花费了大量的时间在日志调试上。这里给大家推荐一款好用的BUG监控工具Fundebug。交流有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智者。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。