JS有哪些高效的魔法运算符?你知道几种?
Admin 2021-08-20 群英技术资讯 1746 次浏览
JS有哪些高效的魔法运算符?对于JS运算符大家应该都比较熟悉,但JavaScript在不断更新,也会增加不少高效的运算法,这篇文章给大家分享一些高效的魔法运算符,感兴趣的朋友就继续往下看吧。
之前当我们想要使用某个结构比较深的属性,同时又无法确定所有的父级一定存在时,我们需要进行一连串的判断,例如一个数据结构:
const student = {
score: {
math: 98,
},
};
我们想要获取最内层的 math 属性的值时:
if (student && student.score) {
console.log(student.score.math);
}
1.1 获取深层次的属性
不过当我们使用可选链运算符后,判断就简单很多了,可选链运算符会在链路上遇到 null 或者 undefined 时,直接返回 undefined,而不会抛出错误异常:
console.log(student?.score?.math);
1.2 执行一个可选的方法
同时在执行一个可能存在的函数时,也可以用到。例如一个 react 组件中,传入的方法是可选的:
// getScore 是一个可选参数,要么是 undefined,要么是一个函数
const Student = ({ getScore }: { getScore?: () => void }) => {
useEffect(() => {
// 当 getScore 存在时,正常执行 getScore()方法
getScore?.();
}, []);
return <div></div>;
};
或者我们执行一个 dom 元素的方法时,也可以使用。
document.querySelector 会返回两种类型,当 dom 元素真实存在时会返回该元素,否则返回 null。写过 typescript 的都知道,当我们要调用某个方法时,总是要先确定该 dom 元素是存在的:
const dom = document.querySelector('.score');
if (dom) {
dom.getBoundingClientRect(); // 当 dom 元素存在时,才执行该方法
}
使用可选链操作符时,就直接调用即可:
document.querySelector('.score')?.getBoundingClientRect();
1.3 获取数组中的值
若数组存在,则获取某个下标的值,我们现在也不用再判断数组是否存在了,可以直接使用:
arr?.[1]; // 若 arr 存在时,则正常获取 arr[1]中的值
上面的 3 种情况也是可以组合使用的。若一个结构比较复杂时,各种类型都有,这里我们要执行数组 math 下标 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
当我们执行上面的语句时,会抛出如下的提示:
Uncaught SyntaxError: Invalid left-hand side in assignment
即不能给左侧的可选链进行赋值操作。
双问号运算符??,我理解是为了解决或运算符||而设计出来的。
我们先来回顾下或运算符的操作,当左侧的数据为假值(数字 0, 布尔类型的 false,空字符串,undefined, null)时,则执行右侧的语句。
false || 123; 0 || 123; '' || '123'; undefined || 123; null || 123;
可是在有些情况下,false 和 0 都是正常的值,但若使用或运算符时,会导致出错。
比如下面的这个例子,当 score 为空时,则默认值为 1。当输入正常值 0 时应当返回 0(但实际上返回了 1):
const getSCore = (score: number) => {
return score || 1;
};
getScore(0); // 1
这时,我们就用到了双问号运算符??。双问号运算符只会在左侧为 undefined 或者 null 时,才会执行右侧的语句。
const getSCore = (score: number) => {
return score ?? 1;
};
getScore(0); // 0
同时,双问号运算符还可以与=结合成为一个赋值操作,当左侧为 null 或者 undefined 时,则将右侧语句的结果赋值给左侧的变量:
score ??= 1; // 1
我们在之前使用或运算符进行赋值操作时,是这样写的:
score = score || 1; age = age && 24;
现在可以直接简写成:
score ||= 1; // 等同于 score = score || 1 age &&= 24; // 等同于 age = age && 24
双星号运算符**是比较早引入到 js 中的,只是我们用到的比较少而已。其实它执行的是一个幂运算,等同于 Math.pow()。
2 ** 10; // 1024, 2的10次方,等同于 Math.pow(2, 10);
以上所有的样例均已在 chrome90 上运行通过。
以上就是关于JS有哪些高效的魔法运算符的介绍了,上述实例和代码仅供参考,希望对大家学习JS运算符有帮助,想要了解更多JS运算符的知识,请搜索群英网络以前的文章或继续浏览下面的相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章带大家了解一下Angular中的5种类(class)装饰器,希望对大家有所帮助!
这篇文章主要介绍了node.js 全局变量的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
用jQuery怎样验证输入是不是数字?在登录注册页面,我们通常需要对输入验证,那么我们怎样知道输入的是不是数字呢?下文给大家分享一个简单的验证数字示例,有一定参考价值,需要的朋友可以参考看看。
js中模块化是什么意思?有什么用?很多新手对js中模块化可能不是很了解,对此,下面小编就给大家介绍一下模块化的概念和作用,以及怎样实现模块化,有需要的朋友可以参考,接下来我们一起往下看吧。
JS的Window窗口对象怎样用,有哪些属性和方法?下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008