for of 与 for in的区别
遍历数组通常使用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);
}
|
f
or 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的区别相关推荐
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别
最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...
- gcc 和 g++ 的联系和区别,使用 gcc 编译 c++
GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...
- Python2 与 Python3 区别
Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...
- Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别
Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...
- HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
- python二进制打开(rb)和文本格式打开(r)什么区别?
使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...
- python中__dict__与dir()区别
前言 Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案. __dict__与dir()的区别: dir()是一个函数,返回的是list: _ ...
- java和C#面向对象的区别
问题:C#中的构造函数和java的构造函数一样吗? 答: .net的项目中,写实体Entity属性时,经常会为每一个属性写一对get和set方法,在用到这个实体或是一个类时,通过new实例化一个对象, ...
- 判别模型和生成模型的区别
20210703 https://www.zhihu.com/question/20446337 机器学习"判定模型"和"生成模型"有什么区别? 重点 http ...
最新文章
- sprintf函数做什么用?
- 帝国cms清除html标签,帝国CMS结合项筛选带已选择的条件和删除操作的方法
- 面试京东Java架构师,竟然被问这些题,学到了!
- 学长毕业日记 :本科毕业论文写成博士论文的神操作
- java的define,关于预处理器:Java中的#define
- 计算机视觉领域常见期刊和会议,计算机视觉领域常见期刊和会议
- 使用ie浏览器设置Domain无法使用session的问题解决办法
- 【kafka】kerberos Server not found in Kerberos database LOOKING_UP_SERVER Identifier doesn‘t match
- 力扣题目——566. 重塑矩阵
- 顺序表C语言实现详解
- 【遥感专题系列】微波遥感(二、合成孔径雷达SAR基础)
- OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
- 什么是IaaS PaaS SaaS,看这一篇就够了
- 当我想深入遗留代码一探究竟的时候
- 首行缩进,文字之间的间距
- 办公未来已来,金山WPS如何从“追随者”到“领跑者”
- 敢于给皇帝吃泻药的乡镇医生
- 从前后端分离到前后端整合的“退步”(一)项目结构
- 华为p8青春版(ALE-UL00)刷机教程
- DCT变换在图像压缩中的实现
热门文章
- How to adjust IFrame height on it's content (转载)
- 关于if嵌套性能的问题
- Professional ASP.NET 2.0之跨页提交-Cross Page Posting
- Azure PowerShell (13) 批量设置Azure ARM Network Security Group (NSG)
- nodejs,python,sublime和Eclipse的包管理器 1
- 解决多个py模块调用同一个python的logging模块,打印日志冲突问题
- python3基础(九)内置函数
- Navsoso引领HUD抬头导航潮流
- QT错误:collect2:ld returned 1 exit status
- 《卷积神经网络》学习笔记