首页 > 其他分享 >for in 和 for of 的区别

for in 和 for of 的区别

时间:2022-10-29 15:46:05浏览次数:41  
标签:index arr 遍历 log 区别 let 数组

for in遍历的是数组的索引(index)而for of遍历的是数组元素值(value0) 

// for in
var obj = {a:1, b:2, c:3}
    
for (let key in obj) {
  console.log(key)
}
// a b c

//for of
const array1 = ['a', 'b', 'c']
 
for (const val of array1) {
  console.log(val)
}
// a b c

先说说for in

for in更适合遍历对象,当然也可以遍历数组,但是会存在一些问题

比如:

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

var arr = [1,2,3]
    
for (let index in arr) {
  let res = index + 1
  console.log(res)
}
//01 11 21

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

 

使用for in会便利数组所有的可枚举属性,包括原型,如果不想遍历原型方法和属性的话,可以在循环内部判断一下,使用hasOwnProperty()方法可以判断某属性是不是该对象的实例属性

var arr = [1,2,3]
Array.prototype.a = 123
    
for (let index in arr) {
  let res = arr[index]
  console.log(res)
}
//1 2 3 123

for(let index in arr) {
    if(arr.hasOwnProperty(index)){
        let res = arr[index]
          console.log(res)
    }
}
// 1 2 3

再来说说ES6中的for of

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

var arr = [1,2,3]
arr.a = 123
Array.prototype.a = 123
    
for (let value of arr) {
  console.log(value)
}
//1 2 3

for of使用遍历数/数组对象/字符串/map/set等拥有迭代器的对象(iterator)的集合,但是不能遍历对象,因为没有迭代器对象,但如果想遍历对象的属性,你可以用for in

var myObject={
  a:1,
  b:2,
  c:3
}
for (var key of Object.keys(myObject)) {
  console.log(key + ": " + myObject[key]);
}
//a:1 b:2 c:3

总结

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

for in得到对象的key或数组、字符串下标

for of得到对象的value或数组、字符串的值

标签:index,arr,遍历,log,区别,let,数组
From: https://www.cnblogs.com/lzx-cm/p/16838853.html

相关文章

  • Python 实例方法、类方法、静态方法之间的区别及实例说明
    类方法定义:使用装饰器@classmethod。第一个参数为“cls”(也可为self),通过它来传递类的属性和方法(不能传实例的属性和方法,即使第一个参数为self,传递的也是类的属性和方......
  • cookie、session、sessionStorage、localStorage的区别和联系
    一、几个概念·cookie、session,会话跟踪技术,H4的存储机制·localStorage、sessionStorage是webStorage,H5的本地存储机制。·webStorage是针对H4中cookie存储机制的改......
  • PIL和pillow,opencv库的区别
     一、PIL分不清PIL和Pillow,于是简单整理一下二者区别;PIL全称是:PythonImagingLibrary。PIL是一个强大的、方便的python图像处理库,功能非常强大,曾经一度被认为是pyth......
  • 【WPF】绘制图形的三种方法及区别
     WPF中用于绘图的类主要有三个,分别是Shape类、Drawing类和DrawingVisual类,Shape类存在于System.Windows.Shapes命,而Drawing类和DrawingVisual类则都存在于System.Window......
  • 平衡二叉树、B树、B+树的区别
    1、平衡二叉树  2.B树  3.B+树  B+、B和平衡二叉树的区别:1)b,b+相对于平衡二叉树,节点可以存储多个元素,因此整体可以存储较多的数据,并且树的高度也会矮,可以减......
  • 两个循环区别:for(;;)和while(1)
    C语言中死循环有两种常见方式://循环方式1for(;;){//执行语句}//循环方式2while(1){//执行语句} 区别:for(;;)中的;;代表两个空语句,编译器会在编......
  • C++——new和malloc的区别
    new是关键字/操作符,而malloc是函数new一个对象的时候,不但分配内存,而且还会调用类的构造函数(当然如果类没有构造函数,系统也没有给类生成构造函数,那没法调用构造函数了)......
  • nginx root 和 alias 的区别
    区别:alias含有rewrite的意思,可以重写掉不存在的路径。(......
  • sqlserver and or 的区别
    sqlserverandor的区别Or不加括号:查询结果36条数据,BID=21,BID=25匹配的Status的数据都会查询出来 selectBID,TradeID,[status],PaymentToBIdfromTradewhereBID......
  • vue 中watch 回调函数和methos中方法的区别
    1.vue中代码<el-inputv-model="searchkey"placeholder="键名"@input="handleInput"clearablestyle="max-width:300px;"></el-/utils/commonwen文件加下export......