for in 与 for of

122 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

前言

身为一个前端小菜鸟,总是有一个飞高飞远的梦想,因此,每点小成长,我都想要让它变得更有意义,为了自己,也为了更多值得的人

开开心心学技术大法~~

开心

来了来了,他真的来了~

正文

推出时间

  • for in 是 es5引入的

  • for of 是 es6引入的

主要用途

for in 可以遍历数组和对象

但是通常用于遍历对象,为什么不推荐遍历数组呢?

请看:

let array = [1,2,3]

//此时用for in遍历是没问题的
for(let x in array){
	console.log('x',x) // 会依次打印出: x 0 x 1 x 2
}

array.name='arrayName';
//此时用for in遍历也会将array的name属性遍历出来,这个是不符合预期的
for(let x in array){
	console.log('x',x) // 会依次打印出: x 0 x 1 x 2 x name
}

如上,故推荐for in只用来遍历对象就可以了,当然当for in遍历对象的时候,in拿出来的数据也只是对象的key值

例如:

var obj = {
  api: "alipay.mfinstockprod.trade.buy.prepare",
	shadow: false,
	treeId: "",
};

// for in 遍历对象 in出来的数据只有对象的key值,如果要访问value,就要obj[x]来解决
for (let x in obj){
    console.log('x',x)
}
/**
*会依次打印出
* x api alipay.mfinstockprod.trade.buy.prepare
* x shadow false
* x treeId
*/

for of被推出来的目的是为了修复以上for in的缺陷的。所以for of遍历以上数组是没有问题的

for(let x of array){
	console.log('x',x) // 会依次打印出: x 0 x 1 x 2 
}

Note

当然,以上说的遍历数组或者遍历都针对可以被枚举的属性,一般的对象和数组内部都是可以被枚举的,除非因为需求特意指定不可枚举属性,至于枚举属性的详细信息,请看:

当遍历对象的时候,遍历的顺序并不是对象键值的定义顺序,而是会把非负整数的键值排列到最前面进行遍历!

结语

往期好文推荐「我不推荐下,大家可能就错过了史上最牛逼vscode插件集合啦!!!(嘎嘎~)😄」