一、 ?.

可选链操作符(?.)允许读取位于连接对象链深处的属性值,而不必明确验证链中的每个引用是否有效。

let nestedProp = obj.first && obj.first.second;
// 等价于
let nestedProp = obj.first?.second;

js会在尝试访问obj.first.second之前隐式的检查并确定obj.first既不是null也不是undefined。如果obj.firstnull或者undefined,表达式将会短路计算直接返回undefined

二、??

空值合并操作符,可以在使用可选链时设置一个默认值

let customer = {name: "Carl",details: { age: 82 }
};
let customerCity = customer?.city ?? "暗之城";
console.log(customerCity); // “暗之城”const nullValue = null;
const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false
const someNumber = 42;const valA = nullValue ?? "valA 的默认值";
const valB = emptyText ?? "valB 的默认值";
const valC = someNumber ?? 0;console.log(valA); // "valA 的默认值"
console.log(valB); // ""(空字符串虽然是假值,但不是 null 或者 undefined)
console.log(valC); // 42

三、语法

obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)

四、为变量赋默认值

以前,如果想为一个变量赋默认值,通常的做法是使用逻辑或操作符(||

let foo;
//  foo is never assigned any value so it is still undefined
let someDummyText = foo || 'Hello!';

然而,由于 || 是一个布尔逻辑运算符,左侧的操作数会被强制转换成布尔值用于求值。任何假值(0, '', NaN, null, undefined)都不会被返回。这导致如果你使用0''NaN作为有效值,就会出现不可预料的后果。如下代码:

let count = 0;
let text = "";let qty = count || 42;
let message = text || "hi!";
console.log(qty);     // 42,而不是 0
console.log(message); // "hi!",而不是 ""

空值合并操作符可以避免这种陷阱,其只在第一个操作数为null 或 undefined 时(而不是其它假值)返回第二个操作数:

let myText = ''; // An empty string (which is also a falsy value)let notFalsyText = myText || 'Hello world';
console.log(notFalsyText); // Hello worldlet preservingFalsy = myText ?? 'Hi neighborhood';
console.log(preservingFalsy); // '' (as myText is neither undefined nor null)

ES6 可选链 操作符相关推荐

  1. ES6+ 可选链操作符

    1. 前言 在 ES5 中对于安全地访问对象的深嵌套属性时,首先检查它的上一个属性是否存在,然后才能获取属性的值,否则就会报错: var obj = {} console.log(obj.a) // ...

  2. 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录

    使用场景:发现项目有些旧代码多层调用某个对象的属性,由于目标对象可能没那个属性,就导致报错,之前研究es6新特性时发现可以用?.来判断某个对象是否有某个属性来赋值. 测试源代码: var a = {n ...

  3. vue2.0 使用可选链操作符

    一.介绍ES6中js的常用运算符 ES6中js的运算符(?..?:.? ?.? ?=.),讲的很详细 1.空值合并操作符( ?? ) 空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 nu ...

  4. 关于可选链操作符(?.)

    javaScript越更新,越贴近.方便开发者. 大家肯定写过类似的语法: let length = (res && res.data && res.data.leng ...

  5. 【ES11(2020)】可选链操作符和空值合并运算符

    可选链操作符 Optional chaining 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?.操作符的功能类似于.链式操作符,不同之处在于, ...

  6. ES11新特性_可选链操作符---JavaScript_ECMAScript_ES6-ES11新特性工作笔记064

    然后我们去看一下es11提供的这个可选链操作符 可以看到如果我们有个main方法,然后有个config参数 然后我们调用这个main方法 然后写入,db和cache,传入这个对象. 然后我们之前调用的 ...

  7. JS可选链操作符 (?.)

    可选链操作符( ?. ) 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null ...

  8. JS可选链操作符 (?.)的使用

    允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效. ?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefine ...

  9. 可选链操作符( ?. )

    可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null  ...

最新文章

  1. 切版网上线,启用qieban.cn
  2. java file类复制文件路径_java进阶(34)--File类、目录复制
  3. 从桌面到移动:异构计算翻天覆地的技术变革
  4. 职场提醒:面试失败n次以后
  5. 如何编写提供了IDisposable接口的类.
  6. (转)OL2中设置鼠标的样式
  7. wallpaper怎么导入视频_抖音上爆火的手绘视频怎么做?这篇文章来教你!
  8. Flex DataGrid的labelFunction用法例子
  9. python 解压缩字符串_在C中压缩字符串,在python中解压缩
  10. ztree的select设置,完笔
  11. 毕设无忧|单片机类毕设论文模板
  12. MySQL数据库备份与恢复
  13. android 实现点击水波纹,Android 水波纹点击效果(Ripple Effect)
  14. WPS表格恢复到指定日期版本(图片详解)
  15. 20190826——python对象实例搬家具
  16. 单片机c语言给变量赋值,单片机c语言变量的定义和赋值
  17. 大一学生WEB前端静态网页——唯品会1页 包含hover效果
  18. 网络工程师发展及待遇--学习
  19. 点云地面滤波--渐进式形态学滤波
  20. 华维单片机编程科普| 一文读懂稳压二极管

热门文章

  1. 阿里云网盘内测(附下载地址)
  2. 无线蓝牙耳机哪个品牌延迟低?玩游戏延迟低的蓝牙耳机推荐
  3. ui设计工作怎么样:自学ui设计能找到工作吗
  4. win10、pycharm、Intellij IDEA、jupyter及高斯键盘常用快捷键、指令
  5. 见证奇迹的时刻到了 魔兽世界 引爆新闻出版署VS文化部
  6. PYTHON学习路径计划图整理
  7. Jvm-Sandbox原理分析-Sandbox的启动-01
  8. 拆分pdf用什么软件?什么软件可以拆分pdf?pdf拆分成多个文件的软件?
  9. getprop 命令
  10. DZY Loves Modification