操作对象的几种方法

一:判断对象是否为空

  4.  使用ES6的Object.keys()方法        //推荐方法还是放第一个吧

    var data = {};

    var arr = Object.keys(data);

    console.log(arr.length == 0); //true;

  

  1. 转换成字符串进行比对

    var data = {};

      var flag = (JSON.stringify(data) == "{}");

 

  2.  for in 循环判断

    var data = {};

    var a = function (){

      for(var key in data) {
        return false;
      }
      return true;

    }

    a(); //true

  3.  jquery的isEmptyObject方法

    var data = {};

    var a = $.isEmptyObject(data);

    console.log(a); //true

 

二: 删除对象中某个属性

  delete:

    var a = {a : 1, b: 2};

    delete a.b;

    console.log(a);  //{a: 1}

 

三:添加对象属性

  var a = {a: 1};

  a.b = 2;

  console.log(a); // {a: 1,b: 2}

 

四:对象的深拷贝与浅拷贝

  最简单明了的区别

    浅拷贝是指, 修改B对象的属性和方法会影响到A对象的属性和方法, 我们称之为浅拷贝

    深拷贝是指, 修改B对象的属性和方法不会影响到A对象的属性和方法, 我们称之为深拷贝

  浅拷贝:

    1.  var a = {a: 1, b: 2};

    var b = a;

    b.c = 3;

    b.b = 4;

    console.log(a); // {a: 1, b: 4, c: 3}

  深拷贝:

    1. for in循环遍历 

      function deepClone(obj){
          let objClone = Array.isArray(obj)?[]:{};
          if(obj && typeof obj==="object"){
              for(key in obj){
                  if(obj.hasOwnProperty(key)){
                      //判断ojb子元素是否为对象,如果是,递归复制
                      if(obj[key]&&typeof obj[key] ==="object"){
                          objClone[key] = deepClone(obj[key]);
                      }else{
                          //如果不是,简单复制
                          objClone[key] = obj[key];
                      }
                  }
              }
          }
          return objClone;
      }    
      let a={a: 1, b: 2},b=deepClone(a);
      a.b=4;
      console.log(a); {a: 1,b: 4}
      console.log(b); {a: 1,b: 2}
    

    2. JSON.stringify 和 JSON.parse         

      function deepClone(obj){
          let _obj = JSON.stringify(obj)
          let objClone = JSON.parse(_obj);
          return objClone
      }   
      var a = {a: 1, b: 2};
      var b = deepClone(a);
      b.b = 4;
      console.log(b); //{a: 1, b: 4}
      console.log(a); //{a: 1, b: 2}

      

    3. Jquery的extend方法

     
       

      $.extend( [deep ], target, object1 [, objectN ] )

      deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝

      target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。

      object1  objectN可选。 Object类型 第一个以及第N个被合并的对象。 

let a=[0,1,[2,3],4],b=$.extend(true,[],a);
a[0]=1;
a[2][0]=1;
console.log(a,b);

    

 

    

 

posted @ 2019-02-27 11:02  Mr_R  阅读(2642)  评论(0编辑  收藏  举报