作者:---残月_235_999 | 来源:互联网 | 2023-09-15 09:55
现在每年都会发布新版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上运行。