gpt4 book ai didi

javascript - 如果我在 Javascript 中使用 delete,var x 和简单 x 声明有什么区别?

转载 作者:搜寻专家 更新时间:2023-11-01 04:50:12 24 4
gpt4 key购买 nike

x = 42;         // creates the property x on the global object
var y = 43; // creates the property y on the global object, and marks it as non-configurable


// x is a property of the global object and can be deleted
delete x; // returns true

// y is not configurable, so it cannot be deleted
delete y; // returns false

我不明白不可配置是什么意思。为什么我不能删除 y?

最佳答案

当您向对象添加属性时,您可以将其设置为可配置或不可配置。您示例的完整版本:

x = 42;

Object.defineProperty(window, 'x', {
value: 42,
writable: true,
configurable: true,
enumerable: true
});

可以删除可配置的属性,这会将它们从对象中移除(这可能会导致内存被回收,但不是直接的)。

你也可以这样写:

window.x = 42;

这让我们在下一期时更加明显。

window.x = 42; // x is a property
var y = 43; // y is not a property

这就是您无法删除 y 的真正原因。它不是属性,也没有附加到对象。 delete 关键字用于从对象中删除属性。

y 的情况下 - 当它无法到达时(或者当引用计数在旧浏览器中为 0 时),它自然可用于垃圾收集。

您还可以防止属性被删除:

Object.defineProperty(window, 'x', {
value: 42,
writable: true,
configurable: false,
enumerable: true
});

这将导致从尝试删除它时返回 false,或者如果您在严格模式下运行则返回错误。

关于javascript - 如果我在 Javascript 中使用 delete,var x 和简单 x 声明有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29849125/

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