博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
for of 与 for in的区别
阅读量:6591 次
发布时间:2019-06-24

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

 

 

遍历数组通常使用for循环,ES5的话也可以使用forEach,ES5具有遍历数组功能的还有map、filter、some、every、reduce、reduceRight等,只不过他们的返回结果不一样。但是使用foreach遍历数组的话,使用break不能中断循环,使用return也不能返回到外层函数。

1
2
3
4
5
6
7
8
Array.prototype.method=
function
(){
  console.log(
this
.length);
}
var 
myArray=[1,2,4,5,6,7]
myArray.name=
"数组"
for 
(
var 
index 
in 
myArray) {
  
console.log(myArray[index]);
}

使用for in 也可以遍历数组,但是会存在以下问题:

1.index索引为字符串型数字,不能直接进行几何运算

2.遍历顺序有可能不是按照实际数组的内部顺序

3.使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性

所以for in更适合遍历对象,不要使用for in遍历数组。

那么除了使用for循环,如何更简单的正确的遍历数组达到我们的期望呢(即不遍历method和name),ES6中的for of更胜一筹.

1
2
3
4
5
6
7
8
Array.prototype.method=
function
(){
  console.log(
this
.length);
}
var 
myArray=[1,2,4,5,6,7]
myArray.name=
"数组"
;
for 
(
var 
value of myArray) {
  
console.log(value);
}

记住,for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。

for of遍历的只是数组内的元素,而不包括数组的原型属性method和索引name

遍历对象 通常用for in来遍历对象的键名

1
2
3
4
5
6
7
8
9
10
11
Object.prototype.method=
function
(){
  console.log(
this
);
}
var 
myObject={
  a:1,
  b:2,
  c:3
}
for 
(
var 
key 
in 
myObject) {
  
console.log(key);
}

for in 可以遍历到myObject的原型方法method,如果不想遍历原型方法和属性的话,可以在循环内部判断一下,hasOwnPropery方法可以判断某属性是否是该对象的实例属性

1
2
3
4
5
for 
(
var 
key 
in 
myObject) {
  
if
(myObject.hasOwnProperty(key)){
    console.log(key);
  }
}

    同样可以通过ES5的Object.keys(myObject)获取对象的实例属性组成的数组,不包括原型方法和属性。

1
2
3
4
5
6
7
8
9
Object.prototype.method=
function
(){
  console.log(
this
);
}
var 
myObject={
  a:1,
  b:2,
  c:3
}
Object.keys(myObject).forEach(
function
(key,index){<br>  console.log(key,myObject[key])<br>})

转载于:https://www.cnblogs.com/ecmasea/p/8986040.html

你可能感兴趣的文章
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>
超过响应缓冲区限制
查看>>
ubuntu 下安装 matplotlib
查看>>
webservice的几个简单概念
查看>>
underscore 1.7.0 api
查看>>
C# CheckedListBox控件的使用方法
查看>>
spring Transaction Management --官方
查看>>
iOS开发-清理缓存功能的实现
查看>>
IS_ERR、PTR_ERR、ERR_PTR
查看>>
html5 canvas 奇怪的形状垂直渐变
查看>>
mac java环境
查看>>
lamp 一键安装
查看>>
SQL Server 2008 收缩日志(log)文件
查看>>
UICollectionView基础
查看>>
SSAS中CUBE行权限数据级权限控制
查看>>
android学习记录(三)百度地图错误---只有一个电话显示帧,没有地图内容。
查看>>
BZOJ2794 : [Poi2012]Cloakroom
查看>>