成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript中的Object.freeze與const之間的區(qū)別(譯)

monw3c / 1469人閱讀

摘要:一些開(kāi)發(fā)人員特別是新手們會(huì)認(rèn)為這兩個(gè)功能的工作方式是一樣的,但其實(shí)并不是。的問(wèn)題使用聲明的對(duì)象僅能阻止其重新分配,但是并不能使其聲明的對(duì)象具有不可變性能夠阻止更改其屬性。因此,當(dāng)具有嵌套屬性的對(duì)象時(shí),并不能完全凍結(jié)對(duì)象。

原文:The differences between Object.freeze() vs Const in JavaScript?
作者:Bolaji Ayodeji
本文經(jīng)授權(quán)翻譯轉(zhuǎn)載,版權(quán)歸原作者所有!

自ES6發(fā)布以來(lái),ES6給JavaScript帶來(lái)了一些新特性和方法。對(duì)于JavaScript開(kāi)發(fā)者來(lái)說(shuō),這些特性能夠很好地改善了我們的工作流程以及工作效率,其中的特性就包括 Object.freeze()?方法和 const?。

一些開(kāi)發(fā)人員特別是新手們會(huì)認(rèn)為這兩個(gè)功能的工作方式是一樣的,但其實(shí)并不是。 讓我來(lái)告訴你Object.freeze()?和?const? 是如何不同的。

綜述

const?和?Object.freeze()?完全不同。

const?的行為像 let?。它們唯一的區(qū)別是, const?定義了一個(gè)無(wú)法重新分配的變量。 通過(guò) const?聲明的變量是具有塊級(jí)作用域的,而不是像 var?聲明的變量具有函數(shù)作用域。

Object.freeze()?接受一個(gè)對(duì)象作為參數(shù),并返回一個(gè)相同的不可變的對(duì)象。這就意味著我們不能添加,刪除或更改對(duì)象的任何屬性。

可變對(duì)象的屬性能夠進(jìn)行更改,而不可變對(duì)象在創(chuàng)建對(duì)象后不能更改其屬性。
例子 const
const user = "Bolaji Ayodeji"
user = "Joe Nash"

這個(gè)例子會(huì)拋出一個(gè)Uncaught TypeError,因?yàn)槲覀冋趪L試重新分配使用const關(guān)鍵字聲明的變量user,這樣做是無(wú)效的。

這個(gè)例子中使用 let 或者 var 聲明是能夠正常工作的,但是使用 const 并不能。

const 的問(wèn)題

使用const聲明的對(duì)象僅能阻止其重新分配,但是并不能使其聲明的對(duì)象具有不可變性(能夠阻止更改其屬性)。

參考以下代碼,我們使用const關(guān)鍵字聲明了一個(gè)變量,并為其分配了一個(gè)名為user的對(duì)象。

const user = {
  first_name: "bolaji",
  last_name: "ayodeji",
  email: "[email protected]",
  net_worth: 2000
}
user.last_name = "Samson";
// this would work, user is still mutable!
user.net_worth = 983265975975950;
// this would work too, user is still mutable and getting rich :)!
console.log(user);  // user is mutated

盡管我們無(wú)法重新分配這個(gè)名為 user 的變量,但是我們?nèi)匀豢梢愿淖兤鋵?duì)象本身。

const user = {
  user_name: "bolajiayodeji"
}
// won"t work

我們肯定希望對(duì)象具有無(wú)法修改或刪除的屬性。 const?無(wú)法實(shí)現(xiàn)這樣的功能,但是 Object.freeze? 可以。

Object.freeze()

要禁用對(duì)象的任何更改,我們需要使用 Object.freeze()?。

const user = {
  first_name: "bolaji",
  last_name: "ayodeji",
  email: "[email protected]",
  net_worth: 2000
}
Object.freeze(user);
user.last_name = "Samson";
// this won"t work, user is still immutable!
user.net_worth = 983265975975950;
// this won"t work too, user is still immutable and still broke :(!
console.log(user);  // user is immutated

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

Object.freeze?只是做了層淺凍結(jié),當(dāng)遇到具有嵌套屬性的對(duì)象的時(shí)候,我們需要遞歸Object.freeze?來(lái)凍結(jié)具有嵌套屬性的對(duì)象。

const user = {
  first_name: "bolaji",
  last_name: "ayodeji",
  contact: {
    email: "[email protected]",
    telephone: 08109445504,
  }
}

Object.freeze(user);
user.last_name = "Samson";
// this won"t work, user is still immutable!
user.contact.telephone = 07054394926;
// this will work because the nested object is not frozen
console.log(user);

因此,當(dāng)具有嵌套屬性的對(duì)象時(shí), Object.freeze()? 并不能完全凍結(jié)對(duì)象。

要完全凍結(jié)具有嵌套屬性的對(duì)象,您可以編寫自己的庫(kù)或使用已有的庫(kù)來(lái)凍結(jié)對(duì)象,如Deepfreeze?或?immutable-js

結(jié)論

const?和?Object.freeze()?并不同,?const?是防止變量重新分配,而?Object.freeze()?是使對(duì)象具有不可變性。

感謝閱讀,干杯!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104286.html

相關(guān)文章

  • 】如何在 JavaScript 中使用對(duì)象方法

    摘要:中的所有對(duì)象都來(lái)自父的構(gòu)造函數(shù)。不同于數(shù)組的原型方法例如和只能被數(shù)組實(shí)例使用,對(duì)象方法直接來(lái)自構(gòu)造函數(shù),并使用對(duì)象實(shí)例作為參數(shù)。這稱為靜態(tài)方法。創(chuàng)建對(duì)象的鍵值對(duì)的嵌套數(shù)組??捎糜诖_定對(duì)象是否已凍結(jié),并返回布爾值。 原文:How To Use Object Methods in JavaScript作者:Tania Rascia譯者:博軒 介紹 JavaScript 中,對(duì)象是 鍵/值 ...

    longmon 評(píng)論0 收藏0
  • JavaScriptObject.freeze()Const之間區(qū)別

    摘要:與相比,這些功能更好地改善了我們的工作流程。一些開(kāi)發(fā)人員尤其是新手們認(rèn)為這兩個(gè)功能的工作方式相同,但并不是。的行為類似于,唯一的區(qū)別是它定義了一個(gè)無(wú)法重新分配的變量。我們使用聲明了一個(gè)變量,并為它分配了一個(gè)名為的對(duì)象。 翻譯:瘋狂的技術(shù)宅https://medium.freecodecamp.o... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 sho...

    SQC 評(píng)論0 收藏0
  • javascript中對(duì)象常用方法,深克隆和淺克隆以及凍結(jié),擴(kuò)展,密封三大屬性區(qū)別

    摘要:它將返回目標(biāo)對(duì)象。封閉對(duì)象方法判斷一個(gè)對(duì)象是否被密封。為源對(duì)象為修改的屬性名或設(shè)置,同上方法返回一個(gè)給定對(duì)象自身可枚舉屬性的鍵值對(duì)數(shù)組方法返回指定對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的屬性描述符方法判斷兩個(gè)值是否是相同的值。 對(duì)象作為引用類型,工作中免不了復(fù)制對(duì)象,下面來(lái)看看克隆的方法 Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象。它將返回目標(biāo)對(duì)象。淺...

    gplane 評(píng)論0 收藏0
  • 關(guān)于ES模塊你必須要知道一些禁忌(一)

    摘要:沒(méi)有模塊化的支持,使用開(kāi)發(fā)大型應(yīng)用將舉步維艱,所以經(jīng)過(guò)大量的實(shí)踐,社區(qū)制定了一些模塊加載方案,最主要的有運(yùn)行于瀏覽器的方案和運(yùn)行于以為代表的服務(wù)端的方案。該方法返回被凍結(jié)的對(duì)象。 背景 ES Module是JavaScript在ES2015版本開(kāi)始提供的語(yǔ)言標(biāo)準(zhǔn)級(jí)別的模塊化方案,在此之前JavaScript一直沒(méi)有語(yǔ)言級(jí)別的模塊化體系。沒(méi)有模塊化的支持,使用JavaScript開(kāi)發(fā)大型...

    yexiaobai 評(píng)論0 收藏0
  • JavaScript 函數(shù)式編程導(dǎo)論

    摘要:函數(shù)式編程導(dǎo)論從屬于筆者的前端入門與工程實(shí)踐。函數(shù)式編程即是在軟件開(kāi)發(fā)的工程中避免使用共享狀態(tài)可變狀態(tài)以及副作用。 JavaScript 函數(shù)式編程導(dǎo)論從屬于筆者的Web 前端入門與工程實(shí)踐。本文很多地方是講解函數(shù)式編程的優(yōu)勢(shì),就筆者個(gè)人而言是認(rèn)可函數(shù)式編程具有一定的好處,但是不推崇徹底的函數(shù)式編程化,特別是對(duì)于復(fù)雜應(yīng)用邏輯的開(kāi)發(fā)。筆者在應(yīng)用的狀態(tài)管理工具中就更傾向于使用MobX而不是...

    forrest23 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<