热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript中一些高效的魔法运算符

现在每年都会发布新版JavaScript,还会增加一些操作更方便高效的操作符。今天,我们将盘点几个高效的魔术运算符。1.可选链式运算符以前࿰

 

现在每年都会发布新版Javascript,还会增加一些操作更方便高效的操作符。今天,我们将盘点几个高效的魔术运算符。

1.可选链式运算符
以前,当我们想要使用一个具有深层结构的属性,并且不确定所有的父项都存在时,我们需要做出一系列的判断,比如一个数据结构:

const student = {
  score: {
    math: 98,
  },
};

当我们想要得到最里面的数学属性值时:

if (student && student.score) {
  console.log(student.score.math);
}

1.1获取深层属性
但是,当我们使用可选的链式算子时,判断就简单多了。当可选的链运算符在链接上遇到null或undefined时,它将直接返回undefined,而不会引发错误异常:

console.log(student?.score?.math);

1.2执行可选方法
它也可以在执行一个可能的函数时使用。例如,在反应组件中,传入的方法是可选的:

// getScore是一个可选参数,可以是未定义的,也可以是函数
const Student =({ GetScore }:{ GetScore?:()=> void }) => {
useEffect(() => {
//当getScore存在时,正常执行getScore()方法
getScore?。();
}, []);

返回

;
};
或者当我们执行一个dom元素的方法时。

Document.querySelector返回两种类型。如果dom元素存在,它将返回它,否则它将返回null。每个编写过typescript的人都知道,当我们想要调用一个方法时,我们总是必须首先确保dom元素存在:

const DOM = document . query selector('。score’);
if (dom) {
DOM . getboundingclientrect();//此方法仅在dom元素存在时执行
}
当使用可选的链式运算符时,您可以直接调用它:

document.querySelector('.score')?.getBoundingClientRect();

1.3获取数组中的值
如果数组存在,获取下标的值。现在不用判断数组是否存在,可以直接使用:

arr?。[1];//如果arr存在,正常获取arr[1]中的值
以上三种情况也可以结合使用。如果一个结构是复杂的,那么就有各种类型,所以在这里我们将执行数组数学下标2的方法:

const student = {
  score: {
    math: [
      98,
      67,
      () => {
        return 99;
      },
    ],
  },
};


执行:

student?.score?.math?.[2]?.(); // 99
没想到会有效果!

1.4不能执行分配操作
可选的链操作符只能执行获取操作,但不能执行分配操作。

例如,当给可能的数组或dom元素赋值时,将直接引发语法异常:

arr?.[1] = 2; // x
document.querySelector('.score')?.innerHTML = 98; // x

当我们执行上述语句时,我们将抛出以下提示:

未捕获语法错误:赋值中的左侧无效

也就是说,左边的可选链不能赋值。

2.双问号运算符
双问号运算符??我理解它是为了解决or运算符| |。

我们先来回顾一下OR运算符的操作。当左边的数据为假值(数字0,布尔类型false,空字符串,未定义,空)时,执行右边的语句。

false || 123;
0 || 123;
'' || '123';
undefined || 123;
null || 123;

但是,在某些情况下,false和0是正常值,但如果使用or运算符,则会导致错误。

例如,在以下示例中,当分数为空时,默认值为1。当输入正常值0时,应返回0(但实际返回1):

const GetScore =(score:number)= > {
返回得分| | 1;
};

GetScore(0);// 1
这时候我们用双问号运算符??。只有当左侧未定义或为空时,双问号运算符才会在右侧执行语句。

const GetScore =(score:number)= > {
返回分数??1;
};

GetScore(0);// 0
同时,双问号运算符也可以与=组合成为赋值运算。当左侧为空或未定义时,右侧语句的结果被分配给左侧变量:

得分??= 1;// 1
我读了很多,不会骗你

3.或“与”运算的运算和赋值运算
当我们使用or运算符执行赋值操作时,我们写道:

score = score | | 1;
年龄=年龄& & 24;
现在可以缩写为:

分数| | = 1;//相当于score = score || 1
年龄& & = 24;//相当于age = age && 24
4.双星算子
双星算子* *更早引入js,但是我们用的比较少。实际上,它执行的是幂运算,相当于Math.pow()。

2 ** 10;// 1024,2的10次方,相当于Math.pow(2,10);
5.总结
以上所有样品均已在chrome90上运行。


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
author-avatar
---残月_235_999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有