站長資訊網
        最全最豐富的資訊網站

        了解JavaScript中Object.freeze()與const之間的區別

        了解JavaScript中Object.freeze()與const之間的區別

        相關學習推薦:javascript視頻教程

        自發布以來,ES6為JavaScript帶來了一些新功能和方法。這些功能可以更好地改善我們作為JavaScript開發人員的工作流程和生產力。這些新功能包括 Object.freeze() 方法和 const

        在少數開發者尤其是新手中,有人認為這兩個功能的工作原理是一樣的,但NO,它們不是。Object.freeze()const 的工作原理不同。讓我來告訴你怎么做!

        概況

        constObject.freeze() 完全不同。

        • const 的行為就像 let。唯一的區別是,它定義了無法重新分配的變量。const 聲明的變量是塊范圍的,而不是函數范圍的,就像用 var 聲明的變量一樣。
        • Object.freeze() 將一個對象作為參數,并返回與不可變對象相同的對象。這意味著不能添加,刪除或更改對象的任何屬性。

        示例

        const

        const user = 'Bolaji Ayodeji'user = 'Joe Nash'復制代碼

        這將引發 Uncaught TypeError,因為我們試圖重新分配使用 const 關鍵字聲明的變量 user。這無效。

        了解JavaScript中Object.freeze()與const之間的區別

        最初,這將適用于 varlet ,但不適用于 const

        const的問題

        當使用對象時,使用const僅防止重新分配,而不防止不變性。 (防止更改其屬性的能力)

        考慮下面的代碼。我們已經使用 const 關鍵字聲明了一個變量,并為其分配了一個名為 user 的對象。

        const user = {  first_name: 'bolaji',  last_name: 'ayodeji',  email: 'hi@bolajiayodeji.com',  net_worth: 2000}  user.last_name = 'Samson';// 這行得通,user仍然可變!user.net_worth = 983265975975950;// 這也行得通,用戶仍然可變且變得富有 :)!console.log(user);  // user被突變復制代碼
        了解JavaScript中Object.freeze()與const之間的區別

        盡管我們無法重新分配名為object的變量,但是我們仍然可以對對象本身進行突變。

        const user = {  user_name: 'bolajiayodeji'}// won't work復制代碼
        了解JavaScript中Object.freeze()與const之間的區別

        我們絕對希望對象具有無法修改或刪除的屬性。const 無法做到這一點,這就是 Object.freeze() 拯救我們的地方。

        看一下Object.freeze()

        要禁用對對象的任何更改,我們需要 Object.freeze()

        const user = {  first_name: 'bolaji',  last_name: 'ayodeji',  email: 'hi@bolajiayodeji.com',  net_worth: 2000}Object.freeze(user);  user.last_name = 'Samson';// 這行不通,user仍然是一成不變的!user.net_worth = 983265975975950;// 這也行不通,user仍然是一成不變的,仍然無法使用 :(!console.log(user);  // user is immutated復制代碼
        了解JavaScript中Object.freeze()與const之間的區別

        具有嵌套屬性的對象實際上并未凍結

        嗯,Object.freeze() 有點淺顯,你需要在嵌套對象上應用它來遞歸保護它們。

        const user = {  first_name: 'bolaji',  last_name: 'ayodeji',  contact: {    email: 'hi@bolajiayodeji.com',    telephone: 08109445504,   } }Object.freeze(user);  user.last_name = 'Samson';// 這行不通,user仍然是一成不變的!user.contact.telephone = 07054394926;// 這將起作用,因為嵌套對象未凍結console.log(user);復制代碼
        了解JavaScript中Object.freeze()與const之間的區別

        因此,當 Object.freeze() 具有嵌套的屬性時,它不會完全凍結它。

        要完全凍結對象及其嵌套屬性,你可以編寫自己的庫或使用已創建的庫,例如Deepfreeze或immutable-js

        總結

        constObject.freeze() 不同,const 防止重新分配,而 Object.freeze() 防止可變性。

        想了解

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲精品成人片在线观看精品字幕 | 国产成人久久精品区一区二区| 国内精品久久久久国产盗摄 | 国产麻豆精品一区二区三区v视界 国产麻豆一精品一AV一免费 | 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 久久91精品国产91久久户| 亚洲精品视频免费| 四虎国产精品永久地址51| 国产成人精品一区二区三区免费| 欧美精品福利视频一区二区三区久久久精品| 青青青青久久精品国产| 成人区人妻精品一区二区不卡视频 | 国内精品久久久久久久久| 日本一区精品久久久久影院 | 国产成人亚洲综合无码精品| 蜜臀久久99精品久久久久久小说 | 亚洲成网777777国产精品| 国产亚洲美女精品久久久| 亚洲国产精品热久久| 国产精品亚洲精品| 国产精品嫩草影院一二三区入口| 999国内精品永久免费视频| 国产精品无码专区| 国产精品熟女高潮视频| 久久精品国产网红主播| 久久久久久夜精品精品免费啦| 亚洲国产精品无码中文字| 亚洲综合精品网站| 综合久久精品色| 麻豆成人久久精品二区三区免费| 少妇精品无码一区二区三区| 无码国产乱人伦偷精品视频| 亚洲av永久无码精品国产精品| 真实国产乱子伦精品视频| 亚洲精品国产av成拍色拍| 亚洲高清国产AV拍精品青青草原| 亚洲AV永久无码精品一百度影院| 四虎国产精品永久在线| 国产精品亚洲а∨无码播放| 国产精品白浆在线观看免费| 国产亚洲精品一品区99热|