[英]Why JavaScript Object's property is already configurable:false, writable can always be changed from true to false without error?
當我在那里閱讀 YDKJS 書時說:
有一個細微的例外需要注意:即使屬性已經是可配置的:false,writable 始終可以從 true 更改為 false 而不會出錯,但如果已經為 false,則不能恢復為 true。
"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 文檔
當屬性已經存在時,Object.defineProperty() 會嘗試根據描述符中的值和對象的當前配置來修改該屬性。 如果舊描述符的可配置屬性設置為 false,則該屬性被稱為“不可配置”。 無法更改不可配置訪問器屬性的任何屬性。 對於數據屬性,如果屬性是可寫的,則可以修改其值,並且可以將 writable 屬性從 true 更改為 false。 當屬性不可配置時,無法在數據和訪問器屬性類型之間切換。
除非當前值和新值相同,否則嘗試更改不可配置的屬性屬性(值和可寫除外,如果允許)時會引發 TypeError。
當 writable 屬性屬性設置為 false 時,該屬性被稱為“不可寫”。 它不能重新分配。
但是錯誤僅在strict
模式下拋出以強制執行不可變類型
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.