首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中深度克隆对象的最有效方法是什么?

在JavaScript中深度克隆对象的最有效方法是什么?
EN

Stack Overflow用户
提问于 2008-09-24 00:26:09
回答 48查看 2.4M关注 0票数 5.2K

克隆JavaScript对象的最有效方法是什么?我见过有人用obj = eval(uneval(o));,但是that's non-standard and only supported by Firefox

我做过像obj = JSON.parse(JSON.stringify(o));这样的事情,但是我质疑它的效率。

我也看到过有各种缺陷的递归复制函数。

我很惊讶没有规范的解决方案存在。

EN

回答 48

Stack Overflow用户

发布于 2011-01-04 16:05:56

假设您的对象中只有变量而没有任何函数,您可以只使用:

var newObject = JSON.parse(JSON.stringify(oldObject));
票数 524
EN

Stack Overflow用户

发布于 2008-09-23 16:38:51

如果没有任何内置的,你可以试试:

function clone(obj) {
    if (obj === null || typeof (obj) !== 'object' || 'isActiveClone' in obj)
        return obj;

    if (obj instanceof Date)
        var temp = new obj.constructor(); //or new Date(obj);
    else
        var temp = obj.constructor();

    for (var key in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, key)) {
            obj['isActiveClone'] = null;
            temp[key] = clone(obj[key]);
            delete obj['isActiveClone'];
        }
    }
    return temp;
}
票数 359
EN

Stack Overflow用户

发布于 2009-12-12 06:47:19

这就是我正在使用的:

function cloneObject(obj) {
    var clone = {};
    for(var i in obj) {
        if(typeof(obj[i])=="object" && obj[i] != null)
            clone[i] = cloneObject(obj[i]);
        else
            clone[i] = obj[i];
    }
    return clone;
}
票数 112
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/122102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档