惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
罗磊的独立博客
B
Blog
博客园_首页
A
About on SuperTechFans
有赞技术团队
有赞技术团队
V
V2EX
U
Unit 42
I
InfoQ
IT之家
IT之家
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
The Cloudflare Blog
H
Help Net Security

博客园 - 非我

目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto 随手记录: MVC自定义提交form 在文本框的光标处插入指定的文本(另一种方式) 在文本框的光标处插入指定的文本(兼容IE6和Firefox) Javascript对象的比较 对mootools的颜色选择器做个小改进 用户中心 - 博客园 检查矩阵是否有线性相关性 - 非我 - 博客园 WOW笑话,笑死我了 动态修改/添加CSS文件链接 使用.net验证控件遇到的小麻烦 (转)40种网站设置技巧 访问者模式-Visitor 学习与思考 对Response.End的疑问 累啊~用记事本写的小程序 Observer pattern 观察者模式 艾薇尔新歌GrilFriend的MV Command Pattern - 命令模式(ASP.NET版) 动态控件的问题
javascript对象的深拷贝
非我 · 2008-05-19 · via 博客园 - 非我

其实我的办法并不是很好,不过好歹是自己琢磨的,,最开始的思路也是来自网上,就是不区分数组和类,统一只拷贝属性,但我在使用中发现如果拷贝对象是数组或者类的某个属性是数组的话,拷贝过去之后的数组全都无法用下标去访问了,于是我就简单的跟踪了下,发现简单的for each是不能拷贝Object本身的属性的,就是说,你new一个Object,然后给这个Object添加属性,然后用for each的方式去访问这个对象的属性的话,只能访问到后来添加的属性,而数组显然和Object不一样,所以仅仅只拷贝Object的方法就不能适应Array了,于是有了下面的代码:

function Clone(original)
{
    
if(typeof(original) == "object"
    
{
        
if (original.length != undefined)
        
{
            
return CloneArray(original);
        }

        
        
return CloneObject(original);
    }

    
    
return original;
}


function CloneObject(original)
{
    var newObj 
= new Object();
    
    
for(var ele in original)
    
{
        
if(typeof(original[ele]) == "object"
        
{
            
if (original[ele].length != undefined)
            
{
                 newObj[ele] 
= CloneArray(original[ele]);
            }

            
else
            
{
                newObj[ele] 
= CloneObject(original[ele]);
            }

        }

        
else
        
{
            newObj[ele] 
= original[ele];
        }

    }

    
    
return newObj;
}


function CloneArray(original)
{
    var newArray 
= new Array();
    
    
for (var i = 0; i < original.length; i++)
    
{
        
if(typeof(original[i]) == "object"
        
{
            
if (original[i].length != undefined)
            
{
                newArray[i] 
= CloneArray(original[i]);
            }

            
else
            
{
                newArray[i] 
= CloneObject(original[i]);
            }

        }

        
else
        
{
            newArray[i] 
= original[i];
        }

    }

    
    
return newArray;
}

这里我对怎么判断是不是数组没有找到好的办法。