这样写是不是更加简单了呢?由于操作符一旦为空值就会终止,因此也可以使用它来有条件地调用方法或应用条件逻辑
const conditionalProperty = null;
let index = 0;
console.log(conditionalProperty?.[index++]); // undefined
console.log(index); // 0
对于方法的调用你可以这样写
object.runsOnlyIfMethodExists?.()
例如下面的parent
对象,如果我们直接调用parent.getTitle()
,则会报Uncaught TypeError: parent.getTitle is not a function
错误,parent.getTitle?.()
则会终止不会执行
let parent = {
name: “parent”,
friends: [“p1”, “p2”, “p3”],
getName: function() {
console.log(this.name)
}
};
parent.getName?.() // parent
parent.getTitle?.() //不会执行
与无效合并一起使用
提供了一种方法来处理未定义或为空值和表达提供默认值。我们可以使用??
运算符,为表达式提供默认值
console.log(undefined ?? ‘codercao’); // codercao
因此,如果属性不存在,则可以将无效的合并运算符与可选链接运算符结合使用以提供默认值。
let title = data?.children?.[0]?.title ?? ‘codercao’;
console.log(title); // codercao
二、逻辑空分配(?? =)
expr1 ??= expr2
逻辑空值运算符仅在空值( null
或者 undefined
)时才将值分配给expr1,表达方式:
x ??= y
可能看起来等效于:
x = x ?? y;
但事实并非如此!有细微的差别。
空的合并运算符(??)从左到右操作,如果x不为空,则短路。因此,如果x不为 null
或者 undefined
,则永远不会对表达式y
进行求值。因此,如果y
是一个函数,它将根本不会被调用。因此,此逻辑赋值运算符等效于
x ?? (x = y);
三、逻辑或分配(|| =)
此逻辑赋值运算符仅在左侧表达式为 falsy值时才赋值。Falsy值与null有所不同,因为falsy值可以是任何一种值:undefined,null,空字符串(双引号""、单引号’’、反引号``),NaN,0。IE浏览器中的 document.all,也算是一个。
语法
x ||= y
等同于
x || (x = y)
在我们想要保留现有值(如果不存在)的情况下,这很有用,否则我们想为其分配默认值。例如,如果搜索请求中没有数据,我们希望将元素的内部HTML设置为默认值。否则,我们要显示现有列表。这样,我们避免了不必要的更新和任何副作用,例如解析,重新渲染,失去焦点等。我们可以简单地使用此运算符来使用JavaScript更新HTML:
document.getElementById(‘search’).innerHTML ||= ‘No posts found matching this search.’
四、逻辑与分配(&& =)
可能你已经猜到了,此逻辑赋值运算符仅在左侧为真时才赋值。因此:
x &&= y
等同于
x && (x = y)
最后
本次分享几个优雅的JavaScript运算符使用技巧,重点分享了可选链接运算符的使用,这样可以让我们不需要再编写大量我们例子中代码即可轻松访问嵌套属性。但是IE不支持它,因此,如果需要支持该版本或更旧版本的浏览器,则可能需要添加Babel插件。对于Node.js,需要为此升级到Node 14 LTS版本,因为12.x不支持该版本。
如果你也有优雅的优雅的JavaScript运算符使用技巧,请不要吝惜,在评论区一起交流~
关于本文
作者:codercao
https://segmentfault.com/a/1190000039885243
推荐阅读
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。
结尾
正式学习前端大概 3 年多了,很早就想整理这个书单了,因为常常会有朋友问,前端该如何学习,学习前端该看哪些书,我就讲讲我学习的道路中看的一些书,虽然整理的书不多,但是每一本都是那种看一本就秒不绝口的感觉。
以下大部分是我看过的,或者说身边的人推荐的书籍,每一本我都有些相关的推荐语,如果你有看到更好的书欢迎推荐呀。