从 Object creates/returns new Object 中删除一个键是吗?
Does deleting an key from Object creates/returns new Object?
我需要从一个对象中删除一个 property/key 来比较另一个对象,如下例所示
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];
}
}
我有两个对象 Obj1
和 Obj2
。需要比较两个对象并删除 Obj1
中丢失的键。那就是我要从 Obj1
.
中删除密钥 c
它按预期工作。
我想知道的是删除后是否为这个 Obj1 创建了新的对象引用或者对象引用相同?
如何找到它?
对象引用是相同的,您只是在修改它(正如评论者所说)。
删除对象属性会更改 VM 生成的底层 class。如果此对象位于热路径上,则会对性能产生重大影响。对象 shape(例如描述的 here)不同,因此 JIT 编译器必须创建一个新的 class 并丢弃旧的并弄乱引用。但除了性能影响之外,它并没有改变我们(js 开发人员)世界中的任何东西。
我需要从一个对象中删除一个 property/key 来比较另一个对象,如下例所示
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];
}
}
我有两个对象 Obj1
和 Obj2
。需要比较两个对象并删除 Obj1
中丢失的键。那就是我要从 Obj1
.
c
它按预期工作。 我想知道的是删除后是否为这个 Obj1 创建了新的对象引用或者对象引用相同?
如何找到它?
对象引用是相同的,您只是在修改它(正如评论者所说)。
删除对象属性会更改 VM 生成的底层 class。如果此对象位于热路径上,则会对性能产生重大影响。对象 shape(例如描述的 here)不同,因此 JIT 编译器必须创建一个新的 class 并丢弃旧的并弄乱引用。但除了性能影响之外,它并没有改变我们(js 开发人员)世界中的任何东西。