2023年2月6日 星期一

關於 Object.freeze()

 關於 Object.freeze()

前言

  最近使用 Object.freeze() 發現跟自己想的不太一樣,在此把學習的過程作紀錄。


內容

  我對 Object.freeze() 的觀念一直保持著就是個有點麻煩將變數改成不可更改,但最近發現這觀念錯得離譜,範例如下

let valNum = 1111;
let valStr = '1111';
let valObj = {};
const constVal = '1234';
console.log( `valNum is frozen:${ Object.isFrozen( valNum ) }` );
console.log( `valStr is frozen:${ Object.isFrozen( valStr ) }` );
console.log( `valObj is frozen:${ Object.isFrozen( valObj ) }` );
console.log( `constVal is frozen:${ Object.isFrozen( constVal ) }` );
//freeze all object...
Object.freeze(valNum);
Object.freeze(valStr);
Object.freeze(valObj);
Object.freeze(constVal);
//
valNum = 1;
console.log( `valNum:${ valNum}` );
valStr = '12';
console.log( `valNum:${ valStr}` );
valObj.a = 1;
console.log( valObj.a );
//Follow has error...
//constVal = 1111;


範例剛開頭有四種變數,接著對每一種變數做 Object.isFrozen() 來確認是否已經是不可改,結果是只有 valObj 會是 false ,這裡跟我想的不一樣,我本以為 valNum 與 valStr 也應該是  false ,但結果來說 Object.isFrozen()  只對 Object 有效,如果不是 Object 都匯回傳 true ,接著範例對每個變數 Object.freeze() ,發現 valNum 與 valStr 修改是有效的, valObj 加了 a 這個成員,但會發現結果會是 undefined ,過程中是不會有任何的報錯,最後就是 const ,如同預期的結果,一改就報錯。


參考資料

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

沒有留言:

張貼留言