码迷,mamicode.com
首页 > 编程语言 > 详细

javascript基础 -- 判断对象类型 对象的深拷贝

时间:2016-07-23 18:23:09      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

在javascipt中,有array数组对象,object对象,正则对象,函数对象,typeof只能判断是对象,但是却不能判断属于何种对象。

记录一个方法用来判断对象属于那种对象:

技术分享技术分享

使用Object.prototype.toString.call(elem).toLowerCase() 获取对象的类型,再使用 == 来判断是否该类型的对象。

 

看下图,对象是引用类型的值,所以当赋值一个对象的时候,不能象普通类型一样赋值,因为在引用类型赋值后,修改对象的值会直接修改到引用类型中的值,所以,赋值一个对象的时候,如果后面修改了对象的值,赋予过该对象的变量都会被修改。

技术分享技术分享

 

所以,拷贝数据的时候,需要深拷贝:

//判断一个是不是JSON对象,1.对象是没长度的,2.类型是对象3.判断是对象的那个类型:object,object
function isJSON(elem){
  console.log(typeof elem);
  console.log(!elem.length);
  console.log(Object.prototype.toString.call(elem)===‘[object object]‘);
  return typeof elem === "object" && !elem.length && Object.prototype.toString.call(elem).toLowerCase()=="[object object]";
}
//判断是不是数组
function isArray(elem){
  if(Array.isArray){
     return Object.prototype.toString.call(elem).toLowerCase() == ‘[object array]‘;
  }else{
    console.log(1);
     return Array.isArray(elem);
  }
}

function isSimpleType(elem){
  return typeof elem === "string" || typeof elem === ‘number‘|| typeof elem === ‘boolean‘;
}

function deepCopyJSON(json){
  if(!isJSON(json)){return ;}
  var newJSON = {};
  for(var key in json){
    if(isJSON(json[key])){
      newJSON[key] = deepCopyJson(json[key])
    }else if(isArray(json[key])){
      newJSON[key] = deepCopyArray(json[key])
    }else{
      newJSON[key] = json[key];
    }
  }
  return newJSON;
}

function deepCopyArray(arr){
  if(!isArray(arr)){return ;}
  var newArr = [];
  console.log(‘isArr‘);
  for(var i=0;i<arr.length;i++){
    if(isJSON(arr[i])){
      // console.log(0);
      newArr[i] = deepCopyJSON(arr[i]);
    }else if(isArray(arr[i])){
      newArr[i] = deepCopyArray(arr[i]);
    }else{
      console.log(0);
      newArr[i] = arr[i];
    }
  }
  return newArr;
}

function deepCopy(obj){
  var newObj;
  if(isArray(obj)){
    newObj = deepCopyArray(obj);
  }else if(isJSON(obj)){
    newObj = deepCopyJson(obj);
  }
  return newObj;
}
    var json1 = {
      ‘a‘:1,
      ‘b‘:‘string‘,
      ‘c‘:true,
      ‘d‘:{
        ‘a‘:11,
        ‘b‘:true,
        ‘c‘:{
          ‘aa‘:false,
          ‘bb‘:‘字符‘
        }
      },
      ‘e‘:[1,4,5,{a:‘555‘,‘b‘:‘hahahah‘}]
    };
    var arr1 = [1,4,‘dddd‘,{‘a‘:‘a‘,‘b‘:‘b‘},[11,33,44,55,{‘t‘:‘t‘,‘y‘:‘y‘}]];

    var arr2=deepCopyArray(arr1);
  //arr2[4][4].t=3;
//arr1[4][4].1 输出t

  

javascript基础 -- 判断对象类型 对象的深拷贝

标签:

原文地址:http://www.cnblogs.com/cyrziwo/p/5699144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!