zoukankan      html  css  js  c++  java
  • 浅拷贝与深拷贝

    判定一个对象属于那种类型的值:
    Object.prototype.toString()判断内建类型对象和客户端类型对象

    对象的拷贝:
    浅拷贝(对于一个引用类型,如果直接将它赋值给另一个变量,由于这两个引用指向同一个地址,这时改变其中任何一个引用,另一个都会受到影响): 1.直接赋值登录 2.Object.assign({},obj)3.$.extend(false,{},obj)
    深拷贝(对于一个引用类型,如果直接将它赋值给另一个变量,由于这两个引用指向同一个地址,这时改变其中任何一个引用,另一个不会受到影响): 1.$.extend(true,{},obj) 2.JSON.parse(JSON.stringify(obj))
    3.
    //类型判断
    function getType(obj){
    //tostring会返回对应不同的标签的构造函数

    var toString = Object.prototype.toString;

    var map = {

    '[object Boolean]' : 'boolean',

    '[object Number]' : 'number',

    '[object String]' : 'string',

    '[object Function]' : 'function',

    '[object Array]' : 'array',

    '[object Date]' : 'date',

    '[object RegExp]' : 'regExp',

    '[object Undefined]': 'undefined',

    '[object Null]' : 'null',

    '[object Object]' : 'object'

    };

    if(obj instanceof Element) {

    return 'element';

    }

    return map[toString.call(obj)];

    }
    //深拷贝
    function deepClone(data){

    var type = getType(data);

    var obj;

    if(type === 'array'){

    obj = [];

    } else if(type === 'object'){

    obj = {};

    } else {

    //不再具有下一层次

    return data;

    }

    if(type === 'array'){

    for(var i = 0, len = data.length; i < len; i++){

    obj.push(deepClone(data[i]));

    }

    } else if(type === 'object'){

    for(var key in data){

    obj[key] = deepClone(data[key]);

    }

    }

    return obj;

    }

  • 相关阅读:
    钢镚开发的第7天
    钢镚儿开发的第六天
    钢镚儿开发的第五天
    钢镚儿开发第三、第四天
    4.18第九周学习进度
    人与神话阅读笔记02
    钢镚儿开发第二天
    热词云
    钢镚儿开发第一天
    [Usaco2006 Mar]Mooo 奶牛的歌声
  • 原文地址:https://www.cnblogs.com/tutao1995/p/9777230.html
Copyright © 2011-2022 走看看