簡體   English   中英

為什么JavaScript Object 的屬性已經是configurable:false,writable 總是可以從true 變為false 而不會出錯?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM