深入了解JavaScript中逻辑赋值运算符的应用

yizhihongxing

深入了解JavaScript中逻辑赋值运算符的应用需要先了解什么是逻辑赋值运算符。逻辑赋值运算符是一种结合赋值和逻辑运算的运算符,包括了与赋值相关的三种运算符,分别是“&&=”、“||=”、“??=”。

其中“&&=”表示当且仅当左侧变量为真时赋予右侧值,例如:

let a = 1; 
a &&= 2; 
console.log(a) // 输出2
let b = 0;
b &&= 2;
console.log(b) // 输出0

结果显示赋值操作并没有生效,这是因为代码执行时自动按照求解逻辑表达式的方式判断左侧变量是否真值。只有左侧为真时才会执行后面的赋值语句。再举个例子:

let num = 1;
num > 0 &&= 2;

上述代码在执行过程中首先会将左侧的num>0表达式计算出来,结果是true,后面的2就会被赋值给num,因为在逻辑与运算中只有两个条件都为true时才会返回true,因此符合逻辑与的情况,将2赋值给num。

而“||=”表示当且仅当左侧变量为假时赋予右侧值,例如:

let a = 1;
a ||= 2;
console.log(a); // 输出1
let b = 0;
b ||= 2;
console.log(b); // 输出2

上述代码中,当左侧变量为真时,后续语句并不会执行,因此赋值语句a ||= 2没有执行;而当左侧变量为假时,后续语句一定会执行,因此赋值语句b ||= 2会执行。再看一个例子:

let num = 0;
num > 0 || = 2;

上述代码在执行过程中首先会将左侧的num>0表达式计算出来,结果是false,后面的2就会被赋值给num,因为在逻辑或运算中只有两个条件都为false时才会返回false,因此符合逻辑或的情况,将2赋值给num。

最后是“??=”表示当且仅当左侧变量为null或undefined时赋予右侧值,例如:

let a;
a ??= 2;
console.log(a); // 输出2
let b = 1;
b ??= 2;
console.log(b); // 输出1

对于未定义的变量a,左侧变量为null或undefined,因此赋值语句a ??= 2被执行,将2赋值给a;而对于已定义变量的值b,左侧变量不为null或undefined,因此赋值语句b ??= 2不会执行,b的值仍然为原来的1。

通过逻辑赋值运算符,我们可以简洁地实现一些常用的赋值逻辑,提高代码可读性和可维护性,避免无意义的赋值,如下所示:

function processData(options) {
  options.pageNum ||= 1; // 设置默认值
  if (!options.query && options.condition) {
    options.query = buildQuery(options.condition); // 满足条件时赋值
  }
  options.query &&= transformQuery(options.query); // 条件成立时转化query
  options = {...DEFAULT_OPTIONS, ...options}; // 合并对象
  return options;
}

在上述代码中,实现了对传递参数options的逻辑处理,包括设置 pageNum 的默认值、根据条件生成 query、转化 query 和合并对象。逻辑赋值运算符可以减少赋值运算的代码量,使代码更加简洁易读。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入了解JavaScript中逻辑赋值运算符的应用 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++ move()函数案例详解

    C++ move()函数案例详解 什么是move()函数? move()函数是C++11中提供的一种对于对象进行右值引用(Rvalue Reference)的操作。该函数能够将对象转换成右值引用,实现对象的移动(Move)而非拷贝(Copy)。 为什么需要move()函数? 在C++的编程过程中,我们经常需要对于对象进行拷贝操作,以便进行如参数传递、返回值传…

    C 2023年5月22日
    00
  • C#实现Nginx平滑加权轮询算法

    C#实现Nginx平滑加权轮询算法攻略 在介绍如何实现Nginx平滑加权轮询算法之前,我们需要先了解什么是加权轮询算法。加权轮询算法是一种常用的负载均衡算法,通过为不同的服务器设置不同的权重,使得处理能力强的服务器能够处理更多的请求。而Nginx平滑加权轮询算法则进一步优化了加权轮询算法,使得服务器能够更加平滑地处理请求,减少了负载均衡过程中的抖动。 基本思…

    C 2023年5月23日
    00
  • C/C++ 中怎样使用SetConsoleTextAttribute()函数来控制输出字符的颜色

    当在控制台程序中使用C/C++语言输出字符时,通过SetConsoleTextAttribute()函数可以改变输出字符的颜色。该函数在Windows头文件中定义。下面给出SetConsoleTextAttribute()函数的用法及示例代码。 语法 BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, W…

    C 2023年5月23日
    00
  • 现代配置YAML对比JSON优势分析

    简介 本文将从以下几个方面来详细讲解“现代配置YAML对比JSON优势分析”: YAML和JSON的区别和优势; YAML在实际使用中的示例。 YAML和JSON的区别和优势 YAML和JSON都是现代配置中常用的数据序列化格式。它们具有以下区别和优势: YAML优势 对象比JSON更易读; 支持注释,更加可读性、可维护性; 支持多种数据类型(除了数字和字符…

    C 2023年5月24日
    00
  • 浅析VSCode tasks.json中的各种替换变量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等

    关于VSCode tasks.json中的各种替换变量,我整理了如下攻略: 一、什么是tasks.json tasks.json是Visual Studio Code中用来指定任务的一个配置文件,可以用来运行一些自定义的构建、测试、调试等任务。在这个配置文件中,可以指定任务的执行命令,参数,以及一些特定的配置项。 二、tasks.json中的替换变量 在指定…

    C 2023年5月23日
    00
  • Visual Studio 2022最新版安装教程(图文详解)

    Visual Studio 2022最新版安装教程(图文详解) 1. 下载 Visual Studio 2022 首先,前往官方网站 Visual Studio 下载Visual Studio 2022。 2. 运行安装程序 下载完毕后,运行安装程序: 如果您下载的是 .exe 文件,则双击该文件以运行安装程序; 如果您下载的是 .iso 文件,则您需要使用…

    C 2023年5月23日
    00
  • 浅析C# web访问mysql数据库-整理归纳总结

    接下来我将详细讲解“浅析C# web访问mysql数据库-整理归纳总结”的完整攻略。 1.安装MySQL Connector/NET 为了能够访问MySQL数据库,我们需要安装MySQL Connector/NET,可以通过以下步骤进行安装: 1.以管理员身份运行 Visual Studio。2.在“工具”菜单中选择“Nuget包管理器” > “程序包…

    C 2023年5月22日
    00
  • C 语言基础教程(我的C之旅开始了)[三]

    C 语言基础教程(我的C之旅开始了)[三] 完整攻略 在这篇文章中,作者主要介绍了C语言中的条件语句——if语句和switch语句。具体的内容包括以下几个方面: 1. if语句 if是C语言中最常用的条件语句之一,在语法上非常简单,格式为: if (表达式) { 代码块; } 其中,表达式可以是任何可以返回值的C表达式,代码块则是需要执行的语句组合。 在文章…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部