關於 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 ,如同預期的結果,一改就報錯。
沒有留言:
張貼留言