JS运算符怎样使用?浅谈几个JS运算符的使用技巧
Admin 2021-10-23 群英技术资讯 670 次浏览
JS运算符是JavaScript学习中很基础的内容,对此本文就给大家来分享几个JS运算符的使用技巧,对大家学习JS运算符使用有一定的帮助,那么接下来就跟随小编来了解看看吧。
ECMAScript发展进程中,会有很多功能的更新,比如销毁,箭头功能,模块,它们极大的改变JavaScript编写方式,可能有些人喜欢,有些人不喜欢,但像每个新功能一样,我们最终会习惯它们。新版本的ECMAScript引入了三个新的逻辑赋值运算符:空运算符,AND和OR运算符,这些运算符的出现,也是希望让我们的代码更干净简洁,下面分享几个优雅的JavaScript运算符使用技巧
可选链接运算符(Optional Chaining Operator) 处于ES2020提案的第4阶段,因此应将其添加到规范中。它改变了访问对象内部属性的方式,尤其是深层嵌套的属性。它也可以作为TypeScript 3.7+中的功能使用。
相信大部分开发前端的的小伙伴们都会遇到null和未定义的属性。JS语言的动态特性使其无法不碰到它们。特别是在处理嵌套对象时,以下代码很常见:
if (data && data.children && data.children[0] && data.children[0].title) { // I have a title! }
上面的代码用于API响应,我必须解析JSON以确保名称存在。但是,当对象具有可选属性或某些配置对象具有某些值的动态映射时,可能会遇到类似情况,需要检查很多边界条件。
这时候,如果我们使用可选链接运算符,一切就变得更加轻松了。它为我们检查嵌套属性,而不必显式搜索梯形图。我们所要做的就是使用“?” 要检查空值的属性之后的运算符。我们可以随意在表达式中多次使用该运算符,并且如果未定义任何项,它将尽早返回。
对于静态属性用法是:
object?.property
对于动态属性将其更改为:
object?.[expression]
上面的代码可以简化为:
let title = data?.children?.[0]?.title;
然后,如果我们有:
let data; console.log(data?.children?.[0]?.title) // undefined data = {children: [{title:'codercao'}]} console.log(data?.children?.[0]?.title) // codercao
这样写是不是更加简单了呢? 由于操作符一旦为空值就会终止,因此也可以使用它来有条件地调用方法或应用条件逻辑
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
逻辑空值运算符仅在空值(空值或未定义)时才将值分配给expr1,表达方式:
x ??= y
可能看起来等效于:
x = x ?? y;
但事实并非如此!有细微的差别。
空的合并运算符(??)从左到右操作,如果x不为空,则短路。因此,如果x不为null或未定义,则永远不会对表达式y进行求值。因此,如果y是一个函数,它将根本不会被调用。因此,此逻辑赋值运算符等效于
x ?? (x = y);
此逻辑赋值运算符仅在左侧表达式为 falsy值时才赋值。Falsy与null有所不同,因为falsy可以是任何一种值:false,0,“”,null,undefined和NaN等
语法
x ||= y
等同于
x || (x = y)
在我们想要保留现有值(如果不存在)的情况下,这很有用,否则我们想为其分配默认值。例如,如果搜索请求中没有数据,我们希望将元素的内部HTML设置为默认值。否则,我们要显示现有列表。这样,我们避免了不必要的更新和任何副作用,例如解析,重新渲染,失去焦点等。我们可以简单地使用此运算符来使用JavaScript更新HTML:
document.getElementById('search').innerHTML ||= '<i>No posts found matching this search.</i>'
可能你已经猜到了,此逻辑赋值运算符仅在左侧为真时才赋值。因此:
x &&= y
等同于
x && (x = y)
本次分享几个优雅的JavaScript运算符使用技巧,重点分享了可选链接运算符的使用,这样可以让我们不需要再编写大量我们例子中代码即可轻松访问嵌套属性。但是IE不支持它,因此,如果需要支持该版本或更旧版本的浏览器,则可能需要添加Babel插件。对于Node.js,需要为此升级到Node 14 LTS版本,因为12.x不支持该版本。
如果你也有优雅的优雅的JavaScript运算符使用技巧,请不要吝惜,在评论区一起交流~
以上就是几个JS运算符的使用技巧,需要的朋友可以参考。当然JS运算符还有很多,这里没有介绍到,想要了解更多JS运算符,大家可以继续浏览群英网络其他相关的文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文是主要给大家介绍Vue中reactive和ref的内容,接下来会分别介绍reactive和ref的用法以及两者的区别,对大家学习和理解reactive和ref的使用有一定的参考价值,感兴趣的朋友接下跟随小编一起学习一下吧。
转换方法:1、利用split()方法将字符串转为字符数组;2、遍历字符数组,利用charCodeAt()和toString()方法将每个字符元素转为二进制值;3、使用join()方法拼接数组元素,转为完整的二进制值即可。
three.js镜头追踪移动的实现难点有哪些?在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
本文主要介绍了react hooks组件间的传值方式(使用ts),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
main.js是我们的入口文件,主要作用是初始化vue实例,并引入所需要的插件,下面这篇文章主要给大家介绍了关于vue项目中main.js使用方法的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008