了解JavaScript中Object.freeze()与const之间的区别

了解JavaScript中Object.freeze()与const之间的区别

相关学习推荐:javascript视频教程

自发布以来,ES6为JavaScript带来了一些新功能和方法。这些功能可以更好地改善我们作为JavaScript开发人员的工作流程和生产力。这些新功能包括 Object.freeze() 方法和 const

在少数开发者尤其是新手中,有人认为这两个功能的工作原理是一样的,但NO,它们不是。Object.freeze() 和 const 的工作原理不同。让我来告诉你怎么做!

概况

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

const 的行为就像 let。唯一的区别是,它定义了无法重新分配的变量。const 声明的变量是块范围的,而不是函数范围的,就像用 var 声明的变量一样。Object.freeze() 将一个对象作为参数,并返回与不可变对象相同的对象。这意味着不能添加,删除或更改对象的任何属性。

示例

const

const user = 'Bolaji Ayodeji'user = 'Joe Nash'复制代码

登录后复制

这将引发 Uncaught TypeError,因为我们试图重新分配使用 const 关键字声明的变量 user。这无效。

立即学习“Java免费学习笔记(深入)”;

了解JavaScript中Object.freeze()与const之间的区别

最初,这将适用于 var 或 let ,但不适用于 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

总结

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

想了解更多编程学习,敬请关注php培训栏目!

以上就是了解JavaScript中Object.freeze()与const之间的区别的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2725627.html

(0)
上一篇 2025年3月7日 23:25:01
下一篇 2025年2月19日 21:52:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 初探埋点系统

    相关学习推荐:javascript视频教程 前言 最近杂七杂八的事情比较多,难得抽出时间来弥补一下之前的系列,欠大家的埋点系列现在开始走起来 为什么需要埋点系统 电影中 前端开发攻城狮开开心心的 coding,非常自豪的进行了业务、UI 分…

    2025年3月7日
    200
  • 最完整指南 JavaScript 的错误处理

    相关学习推荐:javascript视频教程 什么是编程中的错误 我们的开发过程中并不总是一帆风顺。特别是在某些情况下,我们可能希望停止程序或在发生不良情况时通知用户。 例如: 程序试图打开一个不存在的文件、网络连接断开用户输入了无效字符 在…

    2025年3月7日
    200
  • 解剖式分析 鸿蒙系统的JavaScript框架

    相关学习推荐:javascript 我在前文中曾经介绍过鸿蒙的 javascript 框架,这几天终于把 js 仓库编译通过了,期间踩了不少坑,也给鸿蒙贡献了几个 pr。今天我们就来逐行分析鸿蒙系统中的 js 框架。 文中的所有代码都基于鸿…

    2025年3月7日
    200
  • 抱着枸杞奋战多夜,我总结了JavaScript与ES的25个重要知识点

    相关学习推荐:javascript 前言 说起JavaScript,大家都知道是一门脚本语言。那么ES是什么鬼呢?ES全称ECMAScript ,是JavaScript语言的国际标准。 最近总结了条js的基础特性相关的知识点,大家一起看一下…

    2025年3月7日 编程技术
    200
  • JavaScript常见的手写功能

    相关学习推荐:javascript 1. 防抖 function debounce(func, ms = 500) {  let timer;  return function (…args) {    if (timer) {    …

    2025年3月7日
    200
  • 杜绝这五个 Javascript 错误啦

    javascript栏目将列出五个让你的代码更加可读和易于维护小窍门。 在编辑旧项目的时候,有没有遇到过那种一加新逻辑就“粉碎”的迷惑代码?我们当然都遇到过。为了让世界上不可读的 Javascript 代码更少,我得给你们看看以下的五个例子…

    2025年3月7日
    200
  • JavaScript之 这次彻底搞懂new操作符!

    前言 在学习javascript的过程中,不可避免的会遇到new操作符,这次就来好好刨根问底一下,也算是加深理解和记忆了。 什么是new操作符? mdn中是这么定义new操作符的: new 运算符创建一个用户定义的对象类型的实例或具有构造函…

    2025年3月7日
    200
  • js保留两位小数的函数有哪些

    js保留两位小数的函数有:1、【toFixed()】函数;2、【Math.floor()】函数不四舍五入 ,向下取整;3、使用字符串匹配方法;4、四舍五入保留2位小数;5、浮点数保留两位小数。 js保留两位小数的函数有: 一、四舍五入相关 …

    2025年3月7日
    200
  • 一纸搞懂JS系列(1)之编译原理,作用域,作用域链,变量提升,暂时性死区

    写在最前面:这是javascript栏目我即将开始写的一个系列,主要是在框架横行的时代,虽然上班用的是框架,但是对于面试,以及技术进阶,JS基础知识的铺垫是锦上添花,也是不得不学习的一块知识,虽然开汽车的不需要很懂汽车,只需要掌握汽车的常用…

    2025年3月7日
    200
  • 深入理解JavaScript中的事件

    在本文中,我们将讨论事件处理程序、事件监听器和事件对象。我们还将介绍三种不同的处理事件的方法,以及一些最常见的事件。通过了解事件,您将能够为用户提供更具交互性的web体验。 事件是发生在浏览器中的操作,可以由用户或浏览器本身发起。以下是一些…

    2025年3月7日
    200

发表回复

登录后才能评论