遍历数组通常使用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

for of 与 for in的区别相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  3. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  4. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  5. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

  8. python中__dict__与dir()区别

    前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...

  9. java和C#面向对象的区别

    问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...

  10. 判别模型和生成模型的区别

    20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...

最新文章

  1. sprintf函数做什么用?
  2. 帝国cms清除html标签,帝国CMS结合项筛选带已选择的条件和删除操作的方法
  3. 面试京东Java架构师,竟然被问这些题,学到了!
  4. 学长毕业日记 :本科毕业论文写成博士论文的神操作
  5. java的define,关于预处理器:Java中的#define
  6. 计算机视觉领域常见期刊和会议,计算机视觉领域常见期刊和会议
  7. 使用ie浏览器设置Domain无法使用session的问题解决办法
  8. 【kafka】kerberos Server not found in Kerberos database LOOKING_UP_SERVER Identifier doesn‘t match
  9. 力扣题目——566. 重塑矩阵
  10. 顺序表C语言实现详解
  11. 【遥感专题系列】微波遥感(二、合成孔径雷达SAR基础)
  12. OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
  13. 什么是IaaS PaaS SaaS,看这一篇就够了
  14. 当我想深入遗留代码一探究竟的时候
  15. 首行缩进,文字之间的间距
  16. 办公未来已来,金山WPS如何从“追随者”到“领跑者”
  17. 敢于给皇帝吃泻药的乡镇医生
  18. 从前后端分离到前后端整合的“退步”(一)项目结构
  19. 华为p8青春版(ALE-UL00)刷机教程
  20. DCT变换在图像压缩中的实现

热门文章

  1. How to adjust IFrame height on it's content (转载)
  2. 关于if嵌套性能的问题
  3. Professional ASP.NET 2.0之跨页提交-Cross Page Posting
  4. Azure PowerShell (13) 批量设置Azure ARM Network Security Group (NSG)
  5. nodejs,python,sublime和Eclipse的包管理器 1
  6. 解决多个py模块调用同一个python的logging模块,打印日志冲突问题
  7. python3基础(九)内置函数
  8. Navsoso引领HUD抬头导航潮流
  9. QT错误:collect2:ld returned 1 exit status
  10. 《卷积神经网络》学习笔记