编程技术了解JavaScript中Object.freeze()与const之间的区别_编程技术_亿码酷站插图

相关学习推荐:javascript视频教程”>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之间的区别_编程技术_亿码酷站插图1

最初,这将适用于 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之间的区别_编程技术_亿码酷站插图2

尽管我们无法重新分配名为object的变量,但是我们仍然可以对对象本身进行突变。

const user = {  user_name: 'bolajiayodeji'}// won't work复制代码
了解JavaScript中Object.freeze()与const之间的区别_编程技术_亿码酷站插图3

我们绝对希望对象具有无法修改或删除的属性。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之间的区别_编程技术_亿码酷站插图4

具有嵌套属性的对象实际上并未冻结

嗯,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之间的区别_编程技术_亿码酷站插图5

因此,当 Object.freeze() 具有嵌套的属性时,它不会完全冻结它。

要完全冻结对象及其嵌套属性,你可以编写自己的库或使用已创建的库,例如Deepfreeze或immutable-js

总结

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

了解JavaScript中Object.freeze()与const之间的区别
—–文章转载自PHP中文网如有侵权请联系admin#tyuanma.cn删除

从此驾驭图表的神器matplotlib,Python强大的作图工具

下载声明:
  • 本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压;
  • 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。
  • 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版!
  • 版权声明:
  • 下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。
  • 免责声明:
  • 您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!