遍历对象的属性

for/in可以将在循环体中遍历对象中可枚举的属性(包括继承和自有属性),对象继承的内置方法不可枚举。

var p ={name:"jack",age:23,sex:"boy"}
  var o = {sex:"girl",hobby:"html"}

1.将p可枚举的属性复制到o中,并且覆盖o中相同的属性—————————-

function extend(o,p){
        for(prop in p){
           o[prop] = p[prop]
        }
        return o;    //{{sex: "boy", hobby: "html", name: "jack", age: 23}}
    } 

2.将p可枚举的属性复制到o中,并且o中相同的属性不会被覆盖————————————————

function merge(o,p){
       for(prop in p){
           if(o.hasOwnProperty[prop]) continue;
           o[prop] = p[prop]
       }
       return o;     //{sex: "boy", hobby: "html", age: 23}
   }

3.o中的属性p中没有同名属性,则从o中删除—————————— 删除同名的—————————

 function restrict(o,p){
       for(prop in o){
           //!(prop in p) && delete o[prop];
           //if(!(prop in p)) delete o[prop]
            !p[prop] && delete o[prop]
       }
       return o;
   } 

4.返回一个新对象,且同时具有o/p的属性,有相同的取p中的属性——————

function extend(o,p){
        for(prop in p){
            delete o[prop]
        }
        return o; //{hobby:"html"}
    }  

5.返回一个新对象,且具有同时存在o/p中的属性—————————————————–

var a = (function(o,p){
       return extend(extend({},o),p)
   }(o,p))
    {sex: "boy", hobby: "html", name: "jack", age: 23}  

6.返回一个数组,这个数组中包含o中可枚举的自有属性的名字———————————————

var a =(function(o){
        if(typeof o !== "object") throw TypeError();
        var res = [];
        for(prop in o){
            (o.hasOwnProperty(prop) ) && res.push(prop)
        }
        return res;
    }(o) )

补充
Object.keys() //返回的可枚举的自有属性
Obejct.getOwnProtertyNames() // 返回的自由属性

 Object.keys(a)  //["name","age","sex"]
 Obejct.getOwnProtertyNames(a)  //["name","age","sex"]   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值