Object.isSealed()
Object.isSealed方法可以判斷一個物件是否是密封的。
被密封物件的特點如下:
(1).物件不可擴充套件,也就是不能夠新增新的屬性或者方法。
(2).物件的已有屬性不能被刪除。
(3).物件自有屬性特性不可以重新配置,如果屬性原本是可寫的,那麼可以修改屬性值。
關於屬性特性可以參閱configurable、enumerable和writable一章節。
ES5新增此方法。
更多Object物件內容參閱JavaScript Object 物件一章節。
語法結構:
[JavaScript] 純文字檢視 複製程式碼Object.isSealed(obj)
引數解析:
(1).obj:必需,要判斷的物件。
瀏覽器相容:
(1).IE9+瀏覽器支援此方法。
(2).edge瀏覽器支援此方法。
(3).谷歌瀏覽器支援此方法。
(4).火狐瀏覽器支援此方法。
(5).opera瀏覽器支援此方法。
(6).safria瀏覽器支援此方法。
程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName:"螞蟻部落", age:4, address:"青島市南區" }; console.log(Object.isSealed(antzone));
程式碼執行效果截圖如下:
列印結果為false,說明物件不是封閉的,新建立物件預設不是密封的。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = {}; Object.preventExtensions(antzone); console.log(Object.isSealed(antzone));
程式碼執行效果截圖如下:
通過Object.preventExtensions方法將空物件設定為不可擴充套件。
結果Object.isSealed方法的返回值是true,再來看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { webName:"螞蟻部落", age:4, address:"青島市南區" }; Object.preventExtensions(antzone); console.log(Object.isSealed(antzone));
程式碼執行效果截圖如下:
如果不是空物件,將物件設定為不可擴充套件,但依然不是密封物件。
密封物件不但是不可擴充套件的,同時物件屬性的特性不可更改,且屬性不可刪除。
一個空物件,由於沒有屬性,那就談不上屬性的刪除和屬性特性的更改。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone = { url: "http://www.softwhy.com" }; Object.preventExtensions(antzone); Object.defineProperty(antzone, "url", { configurable: false }); console.log(Object.isSealed(antzone));
程式碼執行效果截圖如下:
程式碼分析如下:
(1).通過Object.preventExtensions方法將物件設定為不可擴充套件。
(2).然後再通過Object.defineProperty設定物件的url屬性為不可配置,設定為不可配置之後,那麼屬性就不能被刪除,屬性特性也就不能被修改,又由於物件只有這個一個屬性,那麼通過上面兩步設定之後,antzone物件就滿足了封閉物件的特點,最終列印true。
ES5與ES2015區別:
ES5中,如果方法的引數不是一個物件,那麼會報錯。
ES2015中,如果方法的引數不是一個物件,那此方法直接返回此引數。