gpt4 book ai didi

javascript - 删除运算符不删除对象属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:36 25 4
gpt4 key购买 nike

我有一个 delete 运算符代码片段,如下所示:

(function() {
var objA = Object.create({
foo: 'foo'
});
var objB = objA;
objB.foo = 'bar';

delete objA.foo;
console.log(objA.foo);
console.log(objB.foo);
}());

//it logs-> foo

由于 delete 运算符用于删除 foo 属性,它不应该存在,因此 undefined 应该记录在控制台中。但是,它正在记录 foo,这是初始化时属性的值。为什么不删除属性?

最佳答案

var objA = Object.create({
foo: 'foo'
});

创建一个对象 objAobjA.__proto__(它的原型(prototype))设置为 {foo: 'foo'}。没有实际的 objA.foo 属性,它实际上是 objA.__proto__.foo,因此没有删除任何内容。

如果你这样做

var objA = {foo: 'foo'}

那么你的代码就可以工作了。

演示:

var refObj = {a: 'a'};
var proto = {
foo: refObj
};
var objA = Object.create(proto);

console.log(objA.foo === objA.__proto__.foo) // should be true
delete objA.foo
console.log(objA.foo) // should print something
delete objA.__proto__.foo
console.log(objA.foo) // should be undefined

关于javascript - 删除运算符不删除对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49186581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com