从Object中删除键是否创建/返回新对象?

时间:2018-01-03 07:56:57

标签: javascript object object-reference

我需要从一个对象中删除一个属性/键,比较另一个对象,如下例

    var Obj1 ={
        a : '1',
        b : '2',
        c : '3',
        d : '4'
    }

    var Obj2 ={
        a : '1',
        b : '2',
        d : '5'
    }

     for (const key in Obj1) {
        if (!Obj2.hasOwnProperty(key)) {
            delete Obj1[key];
        }
    }

我有两个对象Obj1Obj2。需要比较两个对象并删除Obj1中缺少的密钥。我就是从c删除密钥Obj1

它按预期工作。 我想知道的是,删除后对象引用是否为此Obj1创建了新的Object引用?

如何找到它?

1 个答案:

答案 0 :(得分:2)

对象引用是相同的,您只是修改它(如评论者所说)。

删除对象属性会更改VM生成的底层类。如果此对象位于热门路径上,则会对性能产生重大影响。对象 shape (例如描述为here)是不同的,因此JIT编译器必须创建一个新类并抛弃旧类并弄乱引用。但除了性能影响之外,我们(js开发人员)世界并没有改变任何东西。