浅拷贝和深拷贝 - 前置(一) - for...in

  • 原文:MDN - for...in(详情可以点击本篇阅读原文)

  • 功能for...in 语句以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性。

  • 语法for (variable in object) { statement }

    • variable:在每次迭代时,variable 会被赋值为不同的属性名。

    • object:非 Symbol 类型的可枚举属性被迭代的对象。

  • 说明

for...in 循环只遍历可枚举属性。

ArrayObject 使用内置构造函数所创建的对象都会继承自 Object.prototypeString.prototype 的不可枚举属性,例如 StringindexOf() 方法或 ObjecttoString() 方法。

循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。

通常,在迭代过程中最好不要在对象上进行添加、修改或者删除属性的操作,除非是对当前正在被访问的属性。

提示:for...in 不应该用于迭代一个 Array,其中索引顺序很重要。如果迭代访问顺序很重要时,最好使用 for 或者 Array.prototype.forEach() 或者 for...of 循环。


如果仅迭代对象本身的属性,可以使用 getOwnPropertyNames() 或者执行 hasOwnProperty() 来确定某属性是否是对象本身的属性。

  • 代码

// 案例 1	
const obj1 = {	
  a: 1,	
  b: 2,	
  c: 3,	
};	

	
for (let prop in obj1) {	
  console.log('Object.' + prop + ' = ' + obj1[prop]);	
}	

	
/**	
 * 'Object.a = 1'	
 * 'Object.b = 2'	
 * 'Object.c = 3'	
*/	

	
// 案例 2	
const triangle = {	
  a: 1,	
  b: 2,	
  c: 3,	
};	

	
function ColoredTriangle() {	
  this.color = 'deepbluesky';	
}	

	
ColoredTriangle.prototype = triangle;	

	
const obj2 = new ColoredTriangle();	

	
for (let prop in obj2) {	
  if (obj2.hasOwnProperty(prop)) {	
    console.log(`Object.${prop} = ${obj2[prop]}`);	
  }	
}	

	
/**	
 * 'Object.color = deepbluesky'	
*/

640?wx_fmt=png

jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值