ECMAScript 2021 (ES12) 中新增的 Logical Assignment Operators,掌握一种全新的赋值方式

在 ECMAScript 2021 (ES12) 中,新增了三个逻辑赋值运算符,分别是 &&=||=??=,它们可以帮助我们更加简洁地进行赋值操作。本文将详细介绍这三个运算符的用法和意义,以及如何在实际开发中应用它们。

什么是逻辑赋值运算符

在介绍逻辑赋值运算符之前,我们先来了解什么是逻辑运算符。逻辑运算符包括 &&(逻辑与)、||(逻辑或)和 !(逻辑非),它们常常用于条件判断和逻辑运算。

而逻辑赋值运算符就是在逻辑运算符的基础上添加了赋值操作。例如,在 ES6 中,我们想要将变量 x 的值设置为 10,可以使用以下语句:

--- - - ---

而在 ES12 中,我们可以使用逻辑赋值运算符 ||= 更加简洁地实现:

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

这与下面的语句是等价的:

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

同样的,也可以使用 &&=??= 进行赋值操作。接下来将详细介绍它们的用法和意义。

&&=:逻辑与赋值运算符

逻辑与赋值运算符 &&= 的用法如下:

- --- --

该语句等同于下面的语句:

-- --- -
  - - --
-

也就是说,如果 x 是真值(即非空、非零、非 false),则将 y 赋值给 x;否则不进行赋值操作。例如:

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

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

逻辑与赋值运算符可以使代码更加简洁和易读,特别是在进行条件赋值时更是如此。

||=:逻辑或赋值运算符

逻辑或赋值运算符 ||= 的用法如下:

- --- --

该语句等同于下面的语句:

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

也就是说,如果 x 是假值(即空、零、false),则将 y 赋值给 x;否则不进行赋值操作。例如:

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

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

逻辑或赋值运算符也可以使代码更加简洁和易读,特别是在进行默认赋值时更是如此。

??=:nullish 合并赋值运算符

nullish 合并赋值运算符 ??= 的用法如下:

- --- --

该语句等同于下面的语句:

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

也就是说,如果 x 是 null 或 undefined,将 y 赋值给 x;否则不进行赋值操作。例如:

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

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

nullish 合并赋值运算符可以避免在判断 null 或 undefined 时使用 || 运算符带来的一些问题。例如:

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

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

如何使用逻辑赋值运算符

逻辑赋值运算符可以使我们的代码更加简洁和易读,但它们也可能会带来一些风险和副作用。因此,在使用时需要注意一些细节:

  • 逻辑赋值运算符不是完全等价于普通的逻辑运算符和赋值运算符的组合。
  • 逻辑赋值运算符只适用于基本数据类型和对象的赋值,对于其他类型(如数组、函数等)没有效果。
  • 逻辑赋值运算符可能会导致代码的可读性降低,如果表达式过于复杂,建议使用传统的 if-else 语句。

下面是一些使用逻辑赋值运算符的示例代码:

--- - - --

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

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

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

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

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

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

总结

逻辑赋值运算符是 ECMAScript 2021 (ES12) 中新增的一种赋值方式,包括 &&=||=??= 三种运算符。它们可以帮助我们更加简洁地进行赋值操作,但要注意在使用时的细节和风险。掌握逻辑赋值运算符可以提高我们的编程效率和代码质量,也是我们作为前端开发工程师必须掌握的一项技能。

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


猜你喜欢

  • Sequelize ORM 实践攻略:如何使用 Model 验证数据的正确性?

    前言 Sequelize 是一个 Node.js 中广泛使用的 ORM 框架,它支持多种关系型数据库,并提供了丰富的功能、简单易用的 API。在实际开发中,我们需要针对不同的 Model(数据表)设计...

    1 年前
  • 前端性能优化之 JS 优化

    作为前端开发人员,我们经常要面对优化网站性能这个问题。其中一个核心问题是 JS 脚本的性能优化。本文将探讨 JS 代码优化的方法,以及如何提高 JS 代码的性能。 分析性能瓶颈 在进行 JS 代码的优...

    1 年前
  • 基于 Vue.js 的响应式设计实现多媒体应用

    在现代 Web 应用程序中,响应式设计是至关重要的。随着移动设备和桌面设备的出现,许多用户都期望 Web 应用程序可以自适应其设备屏幕的大小,并且能够自然地适应其屏幕大小而不会失真或产生过多滚动。

    1 年前
  • Tailwind 框架中如何制作响应式时钟

    前端开发中,响应式设计已经成为一个基本的需求。而在响应式设计中,时钟是一个常见的组件。本篇文章将介绍如何使用 Tailwind 框架制作一个响应式时钟。我们首先需要了解 Tailwind 框架的基础知...

    1 年前
  • 使用 Next.js 时如何配置 webpack-dev-server 来调试代码?

    Next.js 是一款 React 框架,其使用 webpack 来构建应用程序。webpack-dev-server 是 webpack 的一种开发服务器,提供了一系列实用的特性,比如实时重新加载、...

    1 年前
  • 在 Hapi.js 中使用 Vue.js 进行前端开发的技巧与注意事项

    Hapi.js 是一个优秀的 Node.js 框架,可以用于构建高性能的 Web 应用程序。在使用 Hapi.js 进行前端开发时,我们通常会采用 Vue.js 作为前端框架来实现页面渲染和交互。

    1 年前
  • MongoDB 自动化测试技术探究

    MongoDB 是一个流行的非关系型数据库,广泛应用于 web 应用程序和其他场景中的数据存储和管理。为了保证数据的质量和可靠性,必须采取适当的测试措施来检验 MongoDB 应用程序的正确性。

    1 年前
  • 使用 Enzyme 测试 React 组件时遇到的 'must provide either an {adapter} or a "<root />" node to ..." 错误解决方式

    React 组件是前端开发中必不可少的一部分,而使用 Enzyme 进行测试则是保证组件质量和稳定性的重要保证。然而,在使用 Enzyme 进行测试时,有时会遇到 'must provide eith...

    1 年前
  • Kubernetes 如何自动扩容?

    在互联网时代,应用服务的高可用性是必须保证的核心需求之一。为了应对访问高峰或突发的流量波动,自动扩容已经成为仅次于自动化运维的重要技术手段之一。而在容器编排工具 Kubernetes 中,自动扩容也不...

    1 年前
  • 利用 Headless CMS 构建多租户的数据管理平台

    随着前端技术的发展,Web 应用程序的规模越来越大,需要处理大量数据。为了更好地管理这些数据,并保护其安全性,一些公司开始构建多租户应用程序。这指的是应用程序可以支持多个客户,可以在同一个实例中同时为...

    1 年前
  • 结合 ECMAScript 2019 的 Promise.allSettled 方法来同时处理可选数据的异步操作

    随着前端应用的复杂,异步操作已经成为开发中必不可少的一部分。对于异步操作,我们通常使用 Promise 来处理回调和执行顺序。但有时候我们需要同时处理多个异步操作,并且有些操作是可选的,如果其中一个异...

    1 年前
  • ES6 中的 Promise 的 Chaining 使用技巧

    前言 在编写前端代码过程中,异步操作是非常常见的一种情况。ES6 中的 Promise 对象底层采用事件和回调函数来实现异步操作,利用 Promise 的链式调用可以使异步操作代码更加简洁易读。

    1 年前
  • Redis Cluster 集群模式下的数据备份方案

    前言 Redis 是一款高性能、内存存储的 Key-Value 数据库,随着 Redis 的广泛应用,对数据的可靠性和容灾性要求也越来越高。在 Redis 集群模式下,数据备份是非常重要的,因为任何一...

    1 年前
  • PWA 技术在 Angular 项目中的实践,让你掌握如何在 Angular 中使用 PWA

    什么是 PWA PWA 是 Progressive Web App 的缩写,中文名叫渐进式 Web 应用程序。它是指利用现代 Web 浏览器提供的新特性,开发出具备原生应用程序类似体验的高级 Web ...

    1 年前
  • Koa 框架学习:解决 “Koa middleware not working” 问题

    Koa 是一个 Node.js 的 web 框架,由 Express 的团队创建。它的特点是轻量、灵活,使用了 ES6 中的 generator 内置的异步解决方案,以及 Promise,可以方便地处...

    1 年前
  • RESTful API 中如何进行版本控制

    随着时间的推移,我们的 RESTful API 往往也需要进行更新和升级,以适应新业务需求、修复漏洞和提升性能等。而版本控制则是一个必不可少的工具,它可以帮助我们优雅地管理 API 的演进,支持向后兼...

    1 年前
  • 在 Windows 环境下,如何使用 PM2 运行 Node.js 应用?

    什么是 PM2? PM2 是一个基于 Node.js 的进程管理工具,可以帮助我们在 Node.js 应用运行时进行自动重启,负载均衡等一系列有用的操作。同时,它还提供了一个实用的 CLI 命令行工具...

    1 年前
  • Vue.js 中使用 ref 获取 DOM 元素的方法

    在 Vue.js 的开发中,我们经常需要获取 DOM 元素来改变它们的样式或者属性值,实现交互效果及一些其他的操作。Vue.js 提供了一个 ref 特性,它可以获取页面中特定的 DOM 元素,这个特...

    1 年前
  • 解决 Custom Elements 注册组件时遇到的 Bug:常见的命名规范问题

    随着 Web 开发的发展,Web API 也在不断更新,其中 Custom Elements API 是 HTML 标准中的一部分,可以使用它来定义自定义元素,这使得前端开发更加灵活多样,但是在使用 ...

    1 年前
  • Kubernetes + Istio 服务网格 + Serverless 构建云原生应用

    前言 随着容器化技术的成熟和云原生的概念的普及,更多的企业开始关注 Kubernetes 和 Istio 服务网格等技术的使用。而 Serverless 技术则更是为构建云原生应用提供了最佳实践。

    1 年前

相关推荐

    暂无文章