gpt4 book ai didi

javascript - 为什么 JavaScript 对象的属性已经是可配置的 :false, 可写总是可以从 true 更改为 false 而不会出错?

转载 作者:行者123 更新时间:2023-11-30 19:18:17 25 4
gpt4 key购买 nike

当我阅读 YDKJS 书时说:

There's a nuanced exception to be aware of: even if the property is already configurable:false, writable can always be changed from true to false without error, but not back to true if already false.

"use strict";
const obj = Object.create(null);
Object.defineProperty(obj, "name", {
value: "Murad",
writable: true,
configurable: false,
enumerable: true
});

Object.defineProperty(obj, "name", {
value: "Tofiq",
writable: false,
configurable: false,
enumerable: true
});

但这对我来说很有趣,为什么 JS 有可写异常?

最佳答案

这不是错误,这是设计使然

在Language中特意设计并在v8中实现

来自 MDN Docs

修改属性

当属性已经存在时,Object.defineProperty() 会尝试根据描述符中的值和对象的当前配置修改属性。如果旧描述符将其可配置属性设置为 false,则该属性被称为“不可配置”。无法更改不可配置的访问器属性的任何属性。对于数据属性,如果属性是可写的,则可以修改值,并且可以将可写属性从 true 更改为 false。当属性不可配置时,无法在数据和访问器属性类型之间切换。

除非当前值和新值相同,否则在尝试更改不可配置的属性属性(值和可写除外,如果允许的话)时会抛出 TypeError。

可写属性

当 writable 属性属性设置为 false 时,该属性被称为“不可写”。它不能被重新分配。

但错误仅在strict 模式下抛出以强制执行不可变类型

关于javascript - 为什么 JavaScript 对象的属性已经是可配置的 :false, 可写总是可以从 true 更改为 false 而不会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57763779/

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