2023年10月9日 星期一

注意 preventExtensions() 在空物件運行時的特別行為

 注意 preventExtensions() 在空物件運行時的特別行為

前言

  在 關於檢查 Object.preventExtensions() 、Object.seal() 與 Object.freeze() 的注意事項 有提到 Object.preventExtensions()  ,但我發現它在空物件時遽然有不一樣的結果 ,在此把學習的過程做個紀錄。


內容

  範例如下

let objPE = {
};
let objPE1 = {
  a : 10
};
let objSeal = {
};
let objFrozen = {
};
//
Object.preventExtensions( objPE );
Object.preventExtensions( objPE1 );
Object.seal( objSeal );
Object.freeze( objFrozen );
//
console.log( Object.isExtensible( objPE ) );//false
console.log( Object.isSealed( objPE ) );//false
console.log( Object.isFrozen( objPE ) );//false
//
console.log( Object.isExtensible( objPE1 ) );//false
console.log( Object.isSealed( objPE1 ) );//true
console.log( Object.isFrozen( objPE1 ) );//true

//
console.log( Object.isExtensible( objSeal ) );//false
console.log( Object.isSealed( objSeal ) );//true
console.log( Object.isFrozen( objSeal ) );//false

//
console.log( Object.isExtensible( objFrozen ) );//false
console.log( Object.isSealed( objFrozen ) );//true
console.log( Object.isFrozen( objFrozen ) );//true


範例的 "objPE" 與 "objPE1" 分別代表要進行 Object.preventExtensions()  的非空物件與空物件,要注意比對在 Object.isSealed() 與 Object.isForzen() 的結果是不一樣的!而 Object.seal() 與 Object.freeze() 在空物件與非空物件的結果是一樣的。


參考資料

[ developer.mozilla.org ] Object.isExtensible()

[ developer.mozilla.org ] Object.isSealed()

[ developer.mozilla.org ] Object.isFrozen()


相關文章與資料

關於檢查 Object.preventExtensions() 、Object.seal() 與 Object.freeze() 的注意事項

沒有留言:

張貼留言