筆記 Object.freeze、const,工作筆記、js 筆記


 今天在看code 的時候,看到了寫法很有趣 Object.freeze() ,凍結—可以凍結對象。

(題外話...讓我想到一首歌「林俊傑-凍結」....凍結那時間 凍結初遇那一天) 🧊🧊

 功能 和 const 很像 與防止修改有關。 於是就查一下AI 給的回應(圖1):

Object.freeze 與 const 差異(圖1)

註解

當使用 const 聲明一個變量時,這個變量的引用不能改變,但如果這個變量是對象,對象的屬性仍然可以被修改。

換句話說也就是 設定成object 裡面的屬性值也一樣可變。

實驗

有做了幾次實作發現到 Object.freeze 只能淺凍結 (圖2),除非就是全部凍結。


Object.freeze 凍結(圖2)

換句話當 object 內的物件也想要 凍結, 那麼 就也要下 Object.freeze(obj1.Hello) 。(圖3)

Object.freeze 凍結裡面(圖3)


心得

freeze 凍結,再給予其他參數 是不會拋出TypeError,但是 const 會顯示錯誤。

剛開始看到freeze 想說這不是和const 差不多嗎?  一樣都是不可修改。一開始以為freeze 是凍結就不可修改, 結果 測試下來 和const 一樣, 在特殊情況下 也能 改變其對象的值。

以 結冰的湖水 來比喻 freeze, 只是冷凍了 表層,其內還是活水,除非 下層 也 結凍。 可以參考深層結凍 deepfreeze , 利用 迴圈方式做凍結。

題外話
如果要宣告object 不可被擴充,要能更改 裡面物件屬性值,其實也可使用 Object.seal
至少他不會拋出TypeError😝

留言