js object对象赋值bug和对象复制clone方法

最近在写程序的时候发现,如果新建一个object对象objb,初始化值为obja,如果改变了objb对象的字段值,那么obja也会随之改变,看来对象赋值传递的是一个引用。

代码重现:

<script>
    var obja = {
        'apple':{'key':'apple','name':'苹果'},
        'banana':{'key':'banana','name':'香蕉'},
    };

    var objb = obja;

    console.log(obja);
    delete(objb['apple']);
    console.log(obja);
</script>

执行结果:
Object {apple: Object, banana: Object}
Object {banana: Object}

解决办法clone,生成一个新的对象,而不是对原对象的引用。

代码如下:

<script>
    function clone(obj) {
        var o;
        if (typeof obj == "object") {
            if (obj === null) {
                o = null;
            } else {
                if (obj instanceof Array) {
                    o = [];
                    for (var i = 0, len = obj.length; i < len; i++) {
                        o.push(clone(obj[i]));
                    }
                } else {
                    o = {};
                    for (var j in obj) {
                        o[j] = clone(obj[j]);
                    }
                }
            }
        } else {
            o = obj;
        }
        return o;
    }

    var obja = {
        'apple':{'key':'apple','name':'苹果'},
        'banana':{'key':'banana','name':'香蕉'},
    };

    var objb = clone(obja);

    console.log(obja);
    delete(objb['apple']);
    console.log(obja);
</script>

执行结果:

Object {apple: Object, banana: Object}
Object {apple: Object, banana: Object}

done!

出处:www.l1mn.com

原文标题:js object对象赋值bug和对象复制clone方法

原文地址:https://www.l1mn.com/p/c12bb4.html

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

分类:js
标签:js
评论

皖ICP备2023023451号

Copyright © L1MN.COM 联系方式:l1mnfw@163.com