• 【javascript基础】之深度克隆(深度拷贝)一个对象


    【题记】JavaScript深度克隆(深度拷贝)一个对象 http://www.css88.com/archives/4818  看到这篇文章,愚人码头方法还行,但总觉得缺少了什么,如果参数是伪数组的时候,比如childNodes,获取的是NodeList,是一个伪数组,用Array.prototype.slice.call(obj, 0)会报错,因为IE8以及更早的版本将NodeList以COM对象形式实现的。

    我的代码如下:

     1 function isArray( obj ){
     2     return     Object.prototype.toString.call(obj) === '[object Array]';
     3 }
     4 
     5 function isObject( obj ){
     6     return     Object.prototype.toString.call(obj) === '[object Object]';
     7 }
     8 
     9 function extend(obj){
    10     
    11     if(!obj || (obj.length && obj.length === 0) ){
    12         throw new Error("[参数错误]:请传入对象或者数组");    
    13     }
    14     
    15     var rets = null;
    16     
    17     if(obj.length){        
    18         try{
    19             rets = [].slice.call(obj, 0);    
    20         }catch(e){
    21             rets = [];
    22             i = obj.length;
    23             while(i--){
    24                 rets[i] = obj[i];
    25             }
    26         }
    27     }else{
    28         rets = {}
    29         for(var key in obj){
    30             var value = obj[key];
    31             if(obj.hasOwnProperty(key)){
    32                 rets[key] = isObject(value) ? extend(value) : value;
    33             }    
    34         }    
    35     
    36     }
    37     
    38     return rets;    
    39 }
    40 
    41 var a = {
    42     attr1 : 11,
    43     attr2 : 22,
    44     attr3 : {
    45         attr31 : 31    ,
    46         attr44 : {
    47             1 : 33,
    48             33: 333    
    49         }
    50     }    
    51 };
    52 
    53 console.log(extend(a));
    54 
    55 console.log(extend(document.querySelectorAll("div")));

     运行输出结果如下:

     还有文章里面还有一个方法挺好的,用的是JSON的方法

    var str = JSON.stringify(obj);
    var o = JSON.parse(str);
  • 相关阅读:
    左右对齐Justify遇到的坑
    JS中的相等性判断===, ==, Object.is()
    JS调用栈的一些总结
    VueI18n
    【转】Webpack 快速上手(下)
    【转】Webpack 快速上手(中)
    【转】Webpack 快速上手(上)
    springboot打包排除指定jar包依赖
    prometheus+grafana搭建
    fbctf 安装部署出现的问题
  • 原文地址:https://www.cnblogs.com/sniper007/p/2778143.html
Copyright © 2020-2023  润新知