溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript中Object.freeze()與const有什么區(qū)別

發(fā)布時間:2020-09-15 09:25:04 來源:億速云 閱讀:180 作者:小新 欄目:web開發(fā)

這篇文章主要介紹了JavaScript中Object.freeze()與const有什么區(qū)別,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

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

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

概況

constObject.freeze() 完全不同。

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

示例

const

const user = 'Bolaji Ayodeji'user = 'Joe Nash'復(fù)制代碼

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

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

const的問題

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

考慮下面的代碼。我們已經(jīng)使用 const 關(guān)鍵字聲明了一個變量,并為其分配了一個名為 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被突變復(fù)制代碼

盡管我們無法重新分配名為object的變量,但是我們?nèi)匀豢梢詫ο蟊旧磉M行突變。

const user = {  user_name: 'bolajiayodeji'}// won't work復(fù)制代碼

我們絕對希望對象具有無法修改或刪除的屬性。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復(fù)制代碼

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

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

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;// 這將起作用,因為嵌套對象未凍結(jié)console.log(user);復(fù)制代碼

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

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

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

感謝你能夠認真閱讀完這篇文章,希望小編分享JavaScript中Object.freeze()與const有什么區(qū)別內(nèi)容對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI