ES2020引入"链判断运算符"(?.)

const firstName = message?.body?.user?.firstName || 'default';
const fooValue = myForm.querySelector('input[name=foo]')?.value

直接在链式调用的时候判断,左侧的对象是否为null或undefined。如果是的,就不在往下运算,而是返回undefined。

链判断运算符三种用法:

  • obj?.prop // 对象属性
  • obj?.[expr] // 同上
  • func?.(…args) // 函数或对象方法的调用

Null判断运算符(??)

ES2020引入了一个新的Null判断运算符??。它的行为类似||,但是只有运算符左侧的值为null或undefined时,才会返回右侧的值。

const animationDuration = response.settings?.animationDuration ?? 300;

这个运算符只有一个目的,就是跟链判断运算符?.配合使用,为null或undefined的值设置默认值。
??有一个运算优先级问题,它与&&和||的优先级孰高孰低。现在的规则是,如果多个逻辑运算符一起使用,必须用括号表明优先级,否则会报错。

// 报错
lhs && middle ?? rhs
lhs ?? middle && rhs
lhs || middle ?? rhs
lhs ?? middle || rhs
必须加入表明优先级的括号
(lhs && middle) ?? rhs;
lhs && (middle ?? rhs);(lhs ?? middle) && rhs;
lhs ?? (middle && rhs);(lhs || middle) ?? rhs;
lhs || (middle ?? rhs);(lhs ?? middle) || rhs;
lhs ?? (middle || rhs);

JS-ES2020链判断运算符(?.)和Null判断运算符(??)相关推荐

  1. php 三元运算符 为空,PHP中三元运算符和Null合并运算符的简单比较

    在PHP中,三元运算符(?:)和Null合并运算符(??)的用法相似,那么它们之间有什么差异?下面本篇文章就来带大家了解一下三元运算符和Null合并运算符,希望对大家有所帮助. 三元运算符 三元运算符 ...

  2. php null运算符,PHP7 Null合并运算符

    在PHP7,一个新的功能,空合并运算符(??)已被引入.它被用来代替三元运算并与 isset()函数功能结合一起使用.如果它存在并且它不是空的,空合并运算符返回它的第一个操作数;否则返回第二个操作数. ...

  3. JS一起学03:js组成、下拉+text、字符串拼接、分号问题、数据类型、变量类型、作用域和闭包、命名、运算符、流程判断、调试、iNow、onchang

    一.javaScript组成     1.ECMAScript:解释器.翻译 ---------------------------------------------------------几乎没有 ...

  4. JS 中如何判断 undefined 和 null

    为什么80%的码农都做不了架构师?>>>    JS 中如何判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null,下节介绍了 nul ...

  5. Java的if判断对象为null时,null放在比较运算符的左边还是右边较好?

    如java中:if(name == null)和if(null == name)有什么讲究吗? 答:在java里面,它们是一样的.但是通常写为null == name.这其实是在C语言里面引申出来的. ...

  6. 在JS中如何判断undefined和null

    不当用法 有时为了判断某个值有效,JS新手会写这种臃肿代码: if (data != null && typeof(data) != undefined && data ...

  7. Js如何判断undefined和null

    判断是否为undefined var example = undefined; if (typeof(example) == "undefined") {console.log(& ...

  8. html判断字段不为空,js里是否为空字符串的判断

    了解下js里是否为空字符串的判断. JavaScript中可以使用if(typeof obj=="undefined"||obj==null||obj=="") ...

  9. jq判断html为空,jquery如何判断是否为null?

    在我们使用jQuery的做表单验证的时候,有事常常使用到一下的判断,例如是否为null.undefine.NaN.下面本篇文章就简单的总结一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有 ...

最新文章

  1. iOS10 UI教程基础窗口的内容与设置起始窗口
  2. excel取整函数_数据分析小白学习之路(三)——Excel多练熟能生巧
  3. python 贴吧自动回复_利用Python实现微信自动回复!我打游戏再也不怕女朋友发信息了...
  4. applicationstatewinec7 电源管理
  5. android 预约挂号代码_还在医院苦苦排队挂号?Python定时自动挂号和快捷查询化验报告!...
  6. 百叶窗式的幻灯片切换效果原理
  7. Java集合Collection之实现原理解读(HashSet)
  8. pivot sqlserver 条件_SqlServer行转列(PIVOT),列转行(UNPIVOT)总结
  9. 关于Android直接连MySQL获取数据的真机测试的一些坑
  10. 影响中国互联网的100人《世界商业评论》
  11. 谷歌地球Google Earth打不开的解决办法
  12. 很邪门的事,你知道多少?
  13. 服务器挂硬盘 BIOS,TaiShan服务器通过BIOS格式化硬盘将硬盘中的残留数据擦除操作方法...
  14. 深度终端:ubuntu等linux下好用的远程终端软件
  15. poj 1061青蛙的约会
  16. 解读CUDA Compiler Driver NVCC - Ch.4
  17. 联想(Lenovo) 小新M7268W 黑白激光无线WiFi打印多功能一体机 出现:打印机故障:显示扫描单元未找到初始位置 或者 扫描单元马达故障 解决办法
  18. 什么是SystemUI
  19. 扩展欧几里得求多组解CodeForces - 1244C
  20. 梅科尔工作室-Django保姆教程-1

热门文章

  1. iOS磨砂(半透明)效果实现
  2. 小程序向h5页面传值
  3. uniapp 安卓多个音频_Win10发布新版,可从PC直接访问安卓手机APP,你会重启升级吗?...
  4. 新冠特效药还有多远?将来人人都要打疫苗吗?
  5. 瑞波Ripple概念解析-共识Consensus(官方文档不完全翻译)
  6. 武汉python工资一般多少_个人税后月薪一万在武汉是什么样的体验?
  7. 深入理解public static ltTgt T max(Collectionlt? extends Tgt coll,Comparator lt? super Tgt comp)
  8. QT Creater新手入门—— 建立类似于vs的解决方案和项目
  9. IPv6 标准协议(RFC-2460)
  10. virtualbox中系统硬件加速页,已启用硬件虚拟化,但主机并不支持,求助