博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对forEach、for-in还有es6的for-of的一些整理
阅读量:6157 次
发布时间:2019-06-21

本文共 1598 字,大约阅读时间需要 5 分钟。

用forEach遍历数组的话,
不能用break跳出循环,也不能用return返回外层
如果要提前终止,必须把forEach()方法放在一个try块中,并能抛出一个异常。如果forEach()调用的函数抛出foreach.break异常,循环会提前终止。
 
function foreach(a,f,t){    try { a.forEach(f,t); }    catch(e){        if(e === foreach.break)return;        else throw e;    }}foreach.break = new Error("StopIteration");

 

 
for...in 循环只遍历可枚举属性。像 Array 和 Object , Number等 js中基本包装类型的原型属性是不可枚举的 , 它们是使用内置构造函数所创建的对象都会继承自 Object.prototype 和 String.prototype 的不可枚举属性,例如 
 的    方法或者 
 的 
 方法。
循环将迭代对象的所有可枚举属性和从它的构造函数的 prototype 继承而来的(包括被覆盖的内建属性)。
可以注意到for-in循环
能够枚举继承的属性名,所以在
数组上不建议使用for-in循环
可以使用 hasOwnProperty方法来过滤。所有继承了   的对象都会继承到 
hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和   运算符不同,该方法会忽略掉那些从原型链上继承到的属性。
 
for(var i in a){
     if(!a.hasOwnProperty(i)) continue;//跳过继承的属性
     //循环体
}
 
不建议用for-in循环遍历数组还有以下几点原因:
  • 代码中的index不是数字,是字符串“0”、“1”、“2”,可能无意间进行字符串的计算“2”+1=“21”等。
  • 代码可能按照随机顺序遍历数组元素。
for-in是为了对象设计的,可以遍历字符串型的键。
 
ps:属性的枚举性还会影响以下两个函数的结果:  Object.keys() ;  JSON.stringify();  它们只能返回对象本身具有的可枚举属性。
 
for-of循环
 
for(var value of myArray){     console.log(value);}
它和forEach不同,它可以break、continue、return。同时又避开了for-in 的缺点。
for-of可以遍历:
  • 数组
  • 大多数类数组对象:如DOM的NodeList对象
  • 字符串
  • 也支持map和set对象的遍历
例如
 
//遍历Set//基于单词数组创建一个set对象var uniqueWords= new Set(words); for(var word of uniqueWords){     console.log(word);} //遍历Map//map是键值对组成的,所以需要解构来将键值对拆解为两个独立变量:for(var[key,value] of phoneBookMap){     console.log(key+"'s phone number is:" + value);} for-of不支持普通对象,如果你想迭代一个对象属性,可以用for-in循环或内建Object.keys()方法: for(var key of object.keys(someObject)){     console.log(key+":"+someObject[key]);}
for-in循环用来遍历对象属性,for-of循环用来遍历数据--如数组中的值。
 

转载于:https://www.cnblogs.com/ja-clin/p/6556793.html

你可能感兴趣的文章
must implement java.io.Serializable hessian
查看>>
Microsoft Licenses Flash Lite for Windows Mobile Users
查看>>
HDOJ 2020 绝对值排序
查看>>
HDOJ/HDU 2560 Buildings(嗯~水题)
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
[20170628]12C ORA-54032.txt
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>