JS: 对象遍历、对象拷贝

对象遍历

for … of/in

遍历数组、对象、字符串、迭代器、类数组对象(arguments、DOM集合等)等可迭代对象。
遍历顺序不保证。
for in : 遍历全部(包含原型链中)可枚举属性。
for of : 遍历迭代对象定义的要迭代的值(obj.hasOwnProperty(key)为真)。

Object.prototype.objCustom = function() {
   };
Array.prototype.arrCustom = function() {
   };

const iterable = [3, 5, 7];
iterable.foo = 'hello';

for (const i in iterable) {
   
  console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom"
}

for (const i in iterable) {
   
  if (iterable.hasOwnProperty(i)) {
   
    console.log(i); // 0, 1, 2, "foo"
  }
}

for (const i of iterable) {
   
  console.log(i); // 3, 5, 7
}

即使循环提前终止(例如,通过break关键字),也不应重复使用生成器。退出循环后,生成器将关闭,尝试再次对其进行迭代不会产生任何其他结果。

const gen = (function *(){
   
  yield 1;
  yield 2;
  yield 3;
})();
for (const o in gen) {
   
  console.log(o);
  break;  // 关闭迭代器
}
// 迭代器不应再被使用 , 以下操作没有意义!
for (const o of gen) {
   
  console.log(o); // 不会被调用
}

Object.keys

Object.keys(obj)方法(以for…in循环提供的顺序)返回给定对象obj自身可枚举属性名称的数组,并以与普通循环相同的顺序进行迭代。

const object1 = {
   
  a: 'somestring',
  b: 42,
  c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值