文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

es6新增循环怎么使用

2023-07-04 13:31

关注

本篇内容介绍了“es6新增循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

es6新增循环语句有一个:“for of”循环。“for..of”语句可循环遍历整个对象,是在迭代器生产的一系列值的循环;“for..of”循环的值必须是一个iterable(可迭代的),语法“for(当前值 of 数组){...}”。for-of循环不仅支持数组,还支持大多数类数组对象;它也支持字符串遍历,会将字符串视为一系列Unicode字符来进行遍历。

以前for循环,for in循环;而ES6新增循环:for of 循环:遍历(迭代,循环)整个对象。

for..of

ES6新增了一个for..of循环,在迭代器生产的一系列值的循环。for..of循环的值必须是一个iterable

var a = ["a", "b","c","d","e"]for(var idx in a){    console.log(idx)}// 0 1 2 3 4for(var val of a){    console.log(val)}// a b c d e

for..in在数组a的键/索引上循环,for..ofa的值上循环。

ES6之前的代码

var a = ["a", "b","c","d","e"]for(var val, ret, it = a[Symbol.iterator]();(ret=it.next()) && !ret.done){    val = ret.value    console.log(val)}// a b c d e

在底层,for..of循环向iterable请求一个迭代器,然后反复调用这个迭代器把它产生的值赋给循环迭代变量。

JavaScript默认为iterable的标准内建值包括:

字符串迭代方式

for(var c of "hello"){    console.log(c)}// h e l l o

原生字符串值被强制类型转换到等价的String封装对象中,它是一个iterable

for(XYZ of ABC)

对于XYZ这个位置既可以是赋值表达式,也可以是声明。下面看个赋值表达式的例子:

var o = {}for(o.a of [1,2,3]){    console.log(o.a)}o // {a:3}for({x:o.a} of [{x:1},{x:2},{x:3}]){    console.log(o.a)}o // {a:3}

通过break,continue,return提前终止循环。

自定义迭代器

通过对底层的了解,for..ofiterable请求一个迭代器,然后反复调用这个迭代器把它产生的值赋给循环迭代变量。那么我可以自定义一个iterable

var o = {    [Symbol.iterator](){        return this    },    next(){        if(!val){            val = 1        }else{            val ++        }        return {value:val, done:val== 6}    }}for(var val of o[Symbol.iterator]()){    console.log(val)}

由此可见,自定义迭代器满足两个条件,[Symbol.iterator]属性,返回的对象中有next方法,next方法返回值必须是{value:xx,done:xx}的形式,如果遇到done:true,则循环结束。

结语:以上就是for..of循环的全部内容,它可以循环可迭代对象。

扩展知识:为什么要引进 for-of?

要回答这个问题,我们先来看看ES6之前的 3 种 for 循环有什么缺陷:

所以,鉴于以上种种缺陷,我们需要改进原先的 for 循环。但 ES6 不会破坏你已经写好的 JS 代码。目前,成千上万的 Web 网站依赖 for-in 循环,其中一些网站甚至将其用于数组遍历。如果想通过修正 for-in 循环增加数组遍历支持会让这一切变得更加混乱,因此,标准委员会在 ES6 中增加了一种新的循环语法来解决目前的问题,即 for-of 。

那 for-of 到底可以干什么呢?

总结一下,for-of 循环有以下几个特征:

但需要注意的是,for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用
for-in 循环(这也是它的本职工作)。

最后要说的是,ES6 引进的另一个方式也能实现遍历数组的值,那就是 Iterator。上个例子:

const arr = ['a', 'b', 'c'];const iter = arr[Symbol.iterator](); iter.next() // { value: 'a', done: false }iter.next() // { value: 'b', done: false }iter.next() // { value: 'c', done: false }iter.next() // { value: undefined, done: true }

前面的不多说,重点描述for-of

for-of循环不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。

for-of循环也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历:

window.onload=function(){    const arr = [55,00, 11, 22];   arr.name = "hello";  // Array.prototype.FatherName = 'FatherName';            var string1 = 'abcdefghijklmn';  var string2 = 'opqrstuvwxyc';  const stringArr = [string1,string2];  for(let key of stringArr){    console.log(key);  }  for(let key of string1){    console.log(key);  }}

结果:

es6新增循环怎么使用

现在,只需记住:

for-in循环用来遍历对象属性。

for-of循环用来遍历数据—例如数组中的值。

它同样支持Map和Set对象遍历。

Map和Set对象是ES6中新增的类型。ES6中的Map和Set和java中并无太大出入。

SetMap类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var s1 = new Set(); // 空Setvar s2 = new Set([1, 2, 3]); // 含1, 2, 3

es6新增循环怎么使用

重复元素在Set中自动被过滤:

var s = new Set([1, 2, 3, 3, '3']);console.log(s); // Set {1, 2, 3, "3"}

es6新增循环怎么使用

通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果:

var s = new Set([1, 2, 3]);s.add(4);s; // Set {1, 2, 3, 4}s.add(4);s; // Set {1, 2, 3, 4}

通过delete(key)方法可以删除元素:

var s = new Set([1, 2, 3]);s; // Set {1, 2, 3}s.delete(3);s; // Set {1, 2}

Set对象可以自动排除重复项

var string1 = 'abcdefghijklmn';  var string2 = 'opqrstuvwxyc';  var string3 = 'opqrstuvwxyc';  var string4 = 'opqrstuvwxyz';   const stringArr = [string1,string2,string3,string4];   var newSet = new Set(stringArr);  for(let key of newSet){    console.log(key);  }

结果:

es6新增循环怎么使用

Map对象稍有不同:内含的数据由键值对组成,所以你需要使用解构(destructuring)来将键值对拆解为两个独立的变量:

for (var [key, value] of phoneBookMap) {   console.log(key + "'s phone number is: " + value);}

示例

var m = new Map([[1, 'Michael'], [2, 'Bob'], [3, 'Tracy']]);  var map = new Map([['1','Jckey'],['2','Mike'],['3','zhengxin']]);  map.set('4','Adam');//添加key-value  map.set('5','Tom');  map.set('6','Jerry');  console.log(map.get('6'));  map.delete('6');   console.log(map.get('6'));  for(var [key,value] of map) {    console.log('key='+key+' , value='+value);  }

结果:

es6新增循环怎么使用

“es6新增循环怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯