分享更有价值
被信任是一种快乐

es6新增循环怎么使用

文章页正文上

本篇内容介绍了“es6新增循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! es6新增循环语句有一个:“for of”循环。“for..of”语句可循环遍历整个对象,是在迭代器生产的一系列值的循环;“for..of”循环的值必须是一个iterable(可迭代的),语法“for(当前值 of 数组){…}”。for-of循环不仅支持数组,还支持大多数类数组对象;它也支持字符串遍历,会将字符串视为一系列Unicode字符来进行遍历。以前for循环,for in循环;而ES6新增循环:for of 循环:遍历(迭代,循环)整个对象。ES6新增了一个for..of循环,在迭代器生产的一系列值的循环。for..of循环的值必须是一个iterable

vara=["a","b","c","d","e"]
for(varidxina){
console.log(idx)
}
//01234
for(varvalofa){
console.log(val)
}
//abcde

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

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

在底层,for..of循环向iterable请求一个迭代器,然后反复调用这个迭代器把它产生的值赋给循环迭代变量。JavaScript默认为iterable的标准内建值包括:ArrayStringsGeneratorsCollections/TypedArrays

for(varcof"hello"){
console.log(c)
}
//hello

原生字符串值被强制类型转换到等价的String封装对象中,它是一个iterable对于XYZ这个位置既可以是赋值表达式,也可以是声明。下面看个赋值表达式的例子:

varo={}
for(o.aof[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

varo={
[Symbol.iterator](){
returnthis
},
next(){
if(!val){
val=1
}else{
val++
}
return{value:val,done:val==6}
}
}
for(varvalofo[Symbol.iterator]()){
console.log(val)
}

由此可见,自定义迭代器满足两个条件,[Symbol.iterator]属性,返回的对象中有next方法,next方法返回值必须是{value:xx,done:xx}的形式,如果遇到done:true,则循环结束。结语:以上就是for..of循环的全部内容,它可以循环可迭代对象。要回答这个问题,我们先来看看ES6之前的 3 种 for 循环有什么缺陷:forEach 不能 break 和 return;for-in 缺点更加明显,它不仅遍历数组中的元素,还会遍历自定义的属性,甚至原型链上的属性都被访问到。而且,遍历数组元素的顺序可能是随机的。所以,鉴于以上种种缺陷,我们需要改进原先的 for 循环。但 ES6 不会破坏你已经写好的 JS 代码。目前,成千上万的 Web 网站依赖 for-in 循环,其中一些网站甚至将其用于数组遍历。如果想通过修正 for-in 循环增加数组遍历支持会让这一切变得更加混乱,因此,标准委员会在 ES6 中增加了一种新的循环语法来解决目前的问题,即 for-of 。那 for-of 到底可以干什么呢?跟 forEach 相比,可以正确响应 break, continue, return。for-of 循环不仅支持数组,还支持大多数类数组对象,例如 DOM nodelist 对象。for-of 循环也支持字符串遍历,它将字符串视为一系列 Unicode 字符来进行遍历。for-of 也支持 Map 和 Set (两者均为 ES6 中新增的类型)对象遍历。总结一下,for-of 循环有以下几个特征:这是最简洁、最直接的遍历数组元素的语法。这个方法避开了 for-in 循环的所有缺陷。与 forEach 不同的是,它可以正确响应 break、continue 和 return 语句。其不仅可以遍历数组,还可以遍历类数组对象和其他可迭代对象。但需要注意的是,for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用
for-in 循环(这也是它的本职工作)。最后要说的是,ES6 引进的另一个方式也能实现遍历数组的值,那就是 Iterator。上个例子:

constarr=['a','b','c'];
constiter=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-offor-of循环不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象for-of循环也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历:

window.onload=function(){
constarr=[55,00,11,22];
arr.name="hello";
//Array.prototype.FatherName='FatherName';
/*for(letkeyinarr){
console.log('key='+key+',key.value='+arr[key]);
}*/
/*arr.forEach((data)=>{console.log(data);});*/
/*arr.forEach((data,index,arr)=>{console.log(data+','+index+','+arr);});*/
/*for(letkeyofarr){
console.log(key);
}*/
varstring1='abcdefghijklmn';
varstring2='opqrstuvwxyc';
conststringArr=[string1,string2];
for(letkeyofstringArr){
console.log(key);
}
for(letkeyofstring1){
console.log(key);
}
}

结果:现在,只需记住:这是最简洁、最直接的遍历数组元素的语法这个方法避开了for-in循环的所有缺陷与forEach()不同的是,它可以正确响应break、continue和return语句for-in循环用来遍历对象属性。for-of循环用来遍历数据—例如数组中的值。它同样支持Map和Set对象遍历。
Map和Set对象是ES6中新增的类型。ES6中的Map和Set和java中并无太大出入。SetMap类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

vars1=newSet();//空Set
vars2=newSet([1,2,3]);//含1,2,3

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

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

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

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

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

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

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

varstring1='abcdefghijklmn';
varstring2='opqrstuvwxyc';
varstring3='opqrstuvwxyc';
varstring4='opqrstuvwxyz';

conststringArr=[string1,string2,string3,string4];


varnewSet=newSet(stringArr);
for(letkeyofnewSet){
console.log(key);
}

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

for(var[key,免费云主机、域名value]ofphoneBookMap){
console.log(key+"'sphonenumberis:"+value);
}

示例

varm=newMap([[1,'Michael'],[2,'Bob'],[3,'Tracy']]);
varmap=newMap([['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]ofmap){
console.log('key='+key+',value='+value);
}

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

相关推荐: javascript制作表格如何设置行高

这篇文章主要介绍了javascript制作表格如何设置行高的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript制作表格如何设置行高文章都会有所收获,下面我们一起来看看吧。 设置行高的方法有两种:通过CSS样式表,或通…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册