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;

    }

  • 相关阅读:
    【响应式Web设计实践 #BOOK#】
    【JS】(+﹏+)~
    -_-#【邮件】qq邮箱不显示图片
    -_-#【Markdown】
    51Nod——N1284 2 3 5 7的倍数
    51Nod——N1118 机器人走方格
    洛谷——P1014 Cantor表
    洛谷—— P1434 滑雪
    洛谷——P1443 马的遍历
    python(24)- 面向对象进阶
  • 原文地址:https://www.cnblogs.com/tutao1995/p/9777230.html
Copyright © 2011-2022 走看看