全面了解 js ES11 语法规范内的 “常量和常量类型(const 和 readonly)”

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

全面了解 js ES11 语法规范内的“常量和常量类型(const 和 readonly)”

在 JavaScript 中,常量是指不可变的值,在声明的时候就必须被赋予一个值,赋值之后就不能再被修改。常量在 ES6 标准的时候被引入,使用 const 关键字声明。

而 readonly 是 TypeScript 在 ES11 标准中新增的关键字,它与 const 很相似,唯一的区别在于 readonly 可以用来声明在运行时才能被确定的值。这则允许变量不仅被声明为可读的,同时在运行时被指定一次,这更符合一些场景下的使用需求。

这里将我们来全面了解 JavaScript ES11 语法规范内的“常量和常量类型(const 和 readonly)”,让你深入了解这个强大而又灵活的特性。

const 常量

使用关键字 const 声明的变量必须在声明时初始化,且一旦初始化后,便不能再修改。const 常量的作用域与 let 关键字相同,只在声明的块级作用域内有效。

常量的申明如下:

----- -- - -----

当我们试图修改变量 PI 的值时,控制台会提示出错。

-- - ----- -- -------- ---------- ---------- -- -------- ---------

上述代码抛出了一个类型错误,因为我们不能重新分配常量 PI。

当使用 const 关键字声明引用类型时,可以修改其属性,但不能重新分配一个新的对象或数组给它。

----- --- - --- -- ---
------------ -- -----
--- - --- -- -- --- -- ------ ---------- -- -------- ---------

常量使用的注意事项:

  • 常量赋值后值不可更改。
  • 常量拥有块级作用域,与 let 关键字相同。
  • 常量对于声明的变量类型,可以是基本类型、对象、数组等。

readonly 常量

ES11 中,readonly 关键字用来限制一个类的实例的成员变量只能被读取,在 TypeScript 中,readonly 成员变量必须在声明时或者在其构造函数中初始化。

在 JavaScript 中,readonly 也可以用来修饰对象的属性,然而在对象属性中只是被标记为不可写,而不是不可修改,因为可以使用 Object.defineProperty()、Object.defineProperties() 和 Object.freeze() 将其设置为只读。

下面是一个 TypeScript 中使用 readonly 的例子:

----- -------- -
    -------- ----- ------- -- -----
    -------- ------ -------

    ----------------- ------- ------ ------- -
        --------- - -----
        ---------- - ------
    -
-

--- ---- - --- ---------------- ---------
----------------------- -- ----
--------- - -------- -- ------ ------ ------ -- ------ ------- -- -- - --------- ---------

当编译上述代码时,TypeScript 编译器会将类成员变量与存储的初始值转换成直接在属性访问器本身上,任何尝试写入 readonly 成员变量的代码都会得到编译期错误。

另一个 readonly 的使用场景是在函数参数中,通常用来描述参数或者函数返回值的形式。

-------- --------------------- -------- --------- -
    ---------- - ---- -- ------ -----------
-

---------------- -- ----

将数组类型参数设置为 readonly 之后,数组中的元素将不能被修改。

常量使用的注意事项:

  • readonly 是 TypeScript 中新增的关键字,用来限制类的实例和对象的属性只能被读取,不能被修改。
  • readonly 成员变量必须在初始化语句或者构造函数中初始化。
  • 使用 readonly 修饰的数组等集合类型,内部元素也为只读。

总结

在 ES11 版本中,新增了 readonly 关键字,使得 JS 中的常量定义更加灵活,可以更加适应不同场景的使用需求。const 和 readonly 都是用来修饰被声明为常量的变量,但是它们在使用上,还是有些细微的差异,需要根据场景进行灵活选择。在实际应用时,根据代码的特点和业务逻辑的要求来合理地应用常量的定义,可以提高代码的可读性和维护性,降低代码的出错率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64b253b048841e9894e951c3


猜你喜欢

  • 如何通过 Node.js 构建 RESTful API 并集成 Swagger

    RESTful API 是一种软件架构风格,它使得客户端和服务器端可以通过 HTTP 协议进行通信,从而实现数据交互和资源共享。在前端开发中,我们经常需要构建 RESTful API 来提供数据服务,...

    1 年前
  • WebVR 技术下的无障碍虚拟现实探索

    WebVR 技术让浏览器可以支持虚拟现实,这给用户提供了更加沉浸式和真实感的体验。然而,对于残障人群来说,这些技术并不总是无障碍的,因此需要使用一些技巧和工具来解决这些问题。

    1 年前
  • Sequelize 中对插入数据进行唯一性校验的方法

    Sequelize 是一款 Node.js 的 ORM 框架,可以方便地实现对数据库的增删改查操作。在实际开发中,我们经常需要对数据库中的数据进行唯一性校验,以确保数据的有效性和准确性。

    1 年前
  • ECMAScript 2016:如何使用 Object.getOwnPropertyDescriptors() 进行探究元属性?

    前言 ECMAScript 2016 引入了许多新特性,其中 Object.getOwnPropertyDescriptors() 方法可以帮助我们深入探究一个对象的元属性。

    1 年前
  • Material Design 中如何实现 BottomSheetDialog

    在 Material Design 中,Bottom Sheet Dialog 是一个非常常见和有用的控件。它可以作为一种交互方式,让用户操作和内容更加便捷和自然,同时也让应用在视觉上更加美观和充实。

    1 年前
  • RxJS from 方法的使用及常见问题解答

    前言 RxJS 是一个功能强大的响应式编程库,被广泛用于前端开发领域。RxJS 中的 from 方法是一个将任意的可迭代对象、Promise 和其它数据类型转成 observable 对象的功能函数,...

    1 年前
  • 如何使用 Express.js 实现 OAuth2 认证

    OAuth2 是一种用于认证和授权的协议,可以方便地授权用户访问不同的应用程序或服务。Express.js 是一个流行的 Node.js Web 应用程序框架,在前端开发中也起到了重要的作用。

    1 年前
  • Docker 入门教程:使用 Docker 快速启动一个 Mysql 容器

    在现代 Web 开发中,容器化技术已经成为了必不可少的一环。Docker 是目前使用最为广泛的容器化技术,可以帮助开发者轻松地创建、部署和运行应用程序。本文将介绍 Docker 的基本概念以及如何使用...

    1 年前
  • Hapi.js 应用中使用 MongoDB:代码示例和性能测试

    在现代 Web 开发中,数据库是不可或缺的一部分。而 MongoDB 是非关系型数据库中最为流行的之一,其简单易用的特性深受前端开发者喜爱。本文将介绍如何在 Hapi.js 应用中使用 MongoDB...

    1 年前
  • Koa 中如何处理静态资源

    在前端开发中,处理静态资源是一项很重要的任务。Koa 是一款基于 Node.js 的网络框架,在构建 Web 应用程序时,处理静态资源是 Koa 中必不可少的一部分。

    1 年前
  • Enzyme 和 Jest:如何进行 React 组件单元测试

    Enzyme 和 Jest:如何进行 React 组件单元测试 在前端开发中,单元测试是一种测试方式,可以检查代码的正确性,保证代码的质量,有效地减少错误的出现。对于 React 组件开发,Enzym...

    1 年前
  • LESS 中如何定义和使用 Mixin

    在 LESS 中,Mixin 是一种非常强大、灵活和重用性高的特性,常被用于定义一组样式规则集合,可以被引用到任何需要使用的地方,从而简化代码,提高效率。在本文中,我们将深入探讨 LESS 中的 Mi...

    1 年前
  • ECMAScript 2015 中的 Proxy API:解决对象修改问题的好工具

    ECMAScript 2015 中的 Proxy API:解决对象修改问题的好工具 在前端开发中,我们经常需要对对象进行操作。然而,对象的修改可能会带来一系列的问题,如修改后导致的不可预知行为、性能问...

    1 年前
  • 使用 Mocha 进行 API 端点测试的方法介绍

    在前端开发中,API 端点的测试是一个十分重要的实践。在一个程序中,API 端点常常是被多个模块所使用的,而且往往也是与后端程序交互的主要方式。在测试 API 端点的同时,还可以通过这些测试提供更多的...

    1 年前
  • ES9 新增新功能 getOwnPropertyDescriptors 和 Object.fromEntries()

    ES9 新增了两个新的对象方法,分别是 getOwnPropertyDescriptors 和 Object.fromEntries()。这两个方法都非常有用,本文将详细介绍它们的使用和实例,并给出学...

    1 年前
  • Deno 的 FileSystem API 在 Linux 系统下出现 “File not found” 错误解决方法

    在使用 Deno 进行前端开发的时候,很多开发者会遇到 FileSystem API 在 Linux 系统下出现 “File not found” 错误的问题,本文将分享如何解决这个问题。

    1 年前
  • Mongoose 中文 API 手册及使用实例介绍

    前言 Mongoose 是一个 Node.js 的 MongoDB 驱动程序,它提供了一种直接面向对象的方式,让 Node.js 应用程序更容易地与 MongoDB 数据库交互。

    1 年前
  • TypeScript 中如何使用 IIFE 模式

    前言:写代码不仅仅是为了实现功能,也要考虑代码的可读性、可维护性以及性能。在 TypeScript 中,我们可以使用 IIFE(Immediately Invoked Function Express...

    1 年前
  • Cypress UI 自动化测试常见问题解决方法

    随着前端技术的发展,越来越多的公司开始采用 UI 自动化测试来保证应用的稳定性和可靠性。而 Cypress 是一个非常流行的前端自动化测试工具,它的特点在于易用、快速、稳定,对于 UI 自动化测试尤为...

    1 年前
  • # 快速入门 Fastify 和 Koa 的区别

    快速入门 Fastify 和 Koa 的区别 在前端开发领域,有许多 Web 框架被广泛地使用。Fastify 和 Koa 都是这些框架中的佼佼者。两者都支持异步编程,都提供了非常充分的插件生态系统,...

    1 年前

相关推荐

    暂无文章