ES6 可选链 操作符
一、 ?.
可选链操作符(?.)允许读取位于连接对象链深处的属性值,而不必明确验证链中的每个引用是否有效。
let nestedProp = obj.first && obj.first.second;
// 等价于
let nestedProp = obj.first?.second;
js会在尝试访问obj.first.second
之前隐式的检查并确定obj.first
既不是null
也不是undefined
。如果obj.first
是null
或者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 可选链 操作符相关推荐
- ES6+ 可选链操作符
1. 前言 在 ES5 中对于安全地访问对象的深嵌套属性时,首先检查它的上一个属性是否存在,然后才能获取属性的值,否则就会报错: var obj = {} console.log(obj.a) // ...
- 【vue-cli】使用es6的可选链?.操作符报错Module parse failed解决记录
使用场景:发现项目有些旧代码多层调用某个对象的属性,由于目标对象可能没那个属性,就导致报错,之前研究es6新特性时发现可以用?.来判断某个对象是否有某个属性来赋值. 测试源代码: var a = {n ...
- vue2.0 使用可选链操作符
一.介绍ES6中js的常用运算符 ES6中js的运算符(?..?:.? ?.? ?=.),讲的很详细 1.空值合并操作符( ?? ) 空值合并操作符( ?? )是一个逻辑操作符,当左侧的操作数为 nu ...
- 关于可选链操作符(?.)
javaScript越更新,越贴近.方便开发者. 大家肯定写过类似的语法: let length = (res && res.data && res.data.leng ...
- 【ES11(2020)】可选链操作符和空值合并运算符
可选链操作符 Optional chaining 可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?.操作符的功能类似于.链式操作符,不同之处在于, ...
- ES11新特性_可选链操作符---JavaScript_ECMAScript_ES6-ES11新特性工作笔记064
然后我们去看一下es11提供的这个可选链操作符 可以看到如果我们有个main方法,然后有个config参数 然后我们调用这个main方法 然后写入,db和cache,传入这个对象. 然后我们之前调用的 ...
- JS可选链操作符 (?.)
可选链操作符( ?. ) 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null ...
- JS可选链操作符 (?.)的使用
允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效. ?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefine ...
- 可选链操作符( ?. )
可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null ...
最新文章
- 切版网上线,启用qieban.cn
- java file类复制文件路径_java进阶(34)--File类、目录复制
- 从桌面到移动:异构计算翻天覆地的技术变革
- 职场提醒:面试失败n次以后
- 如何编写提供了IDisposable接口的类.
- (转)OL2中设置鼠标的样式
- wallpaper怎么导入视频_抖音上爆火的手绘视频怎么做?这篇文章来教你!
- Flex DataGrid的labelFunction用法例子
- python 解压缩字符串_在C中压缩字符串,在python中解压缩
- ztree的select设置,完笔
- 毕设无忧|单片机类毕设论文模板
- MySQL数据库备份与恢复
- android 实现点击水波纹,Android 水波纹点击效果(Ripple Effect)
- WPS表格恢复到指定日期版本(图片详解)
- 20190826——python对象实例搬家具
- 单片机c语言给变量赋值,单片机c语言变量的定义和赋值
- 大一学生WEB前端静态网页——唯品会1页 包含hover效果
- 网络工程师发展及待遇--学习
- 点云地面滤波--渐进式形态学滤波
- 华维单片机编程科普| 一文读懂稳压二极管