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;

    }

  • 相关阅读:
    将帅问题
    堆栈(链栈)
    堆栈(基础实现原理 顺序栈)
    双向链表
    冒泡排序 (泛型版)
    maven
    jboss数据源配置
    仓库介绍,nexus的安装
    mave聚合继承
    mac mysql 安装
  • 原文地址:https://www.cnblogs.com/tutao1995/p/9777230.html
Copyright © 2011-2022 走看看