JS的可选链操作符(?.)与双问号(??),你用到了吗?
可选链操作符(?.)
以前一般这样使用:
let nestedProp = obj.first && obj.first.second;
或者这样:
let temp = obj.first;
let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);
现在我们这样使用:
let nestedProp = obj.first?.second; // 访问属性
let result = someInterface.customMethod?.(); // 调用方法
let nestedProp = obj?.['prop' + 'Name']; // 表达式
let arrayItem = arr?.[42]; // 访问数组
详细使用可参考:Optional chaining (?.)
双问号(??)
语法:
leftExpr ?? rightExpr
??在leftExpr和rightExpr之间,只有当leftExpr为null或者 undefined时取rightExpr,否则取leftExpr(0,false,""被认为是有意义的,所以还是取leftExpr)
以前这样使用:
let foo;
let someDummyText = foo || 'Hello!';
基础示例:
const nullValue = null;
const emptyText = ""; // falsy
const someNumber = 42;
const valA = nullValue ?? "default for A";
const valB = emptyText ?? "default for B";
const valC = someNumber ?? 0;
console.log(valA); // "default for A"
console.log(valB); // "" (as the empty string is not null or undefined)
console.log(valC); // 42
特殊示例:
null || undefined ?? "foo"; // raises a SyntaxError
true || undefined ?? "foo"; // raises a SyntaxError
(null || undefined) ?? "foo"; // returns "foo"
详细使用可参考:Nullish coalescing operator (??)
工程中怎样使用
babel7以上版本支持,可以添加以下2个devDependencies依赖:
@babel/plugin-proposal-optional-chaining // 可选链
@babel/plugin-proposal-nullish-coalescing-operator // 双问号
在.babelrc或者babel.config.js中这加入2个插件(plugins属性放在JSON顶层):
{
"plugins": [
"@babel/plugin-proposal-nullish-coalescing-operator",
"@babel/plugin-proposal-optional-chaining"
]
}
JS的可选链操作符(?.)与双问号(??),你用到了吗?的更多相关文章
- ?.可选链操作符( ?. ) 可选链运算符可防止抛出 TypeError: Cannot read property ’xxx' of undefined。
可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效.?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null ...
- js 可选链 & 空值合并 In Action
js 可选链 & 空值合并 In Action const obj = { props: { name: 'eric', }, // prop, 不存在的属性 ️ }; console.log ...
- ES2020新特性链操作符 '?.'和'??'
ES2020新特性,js中的可选链操作符?. 概述 回想一下,我们是如何访问可能含有空值(null或undefined)属性的嵌套对象,比如访问web api 返回结果的user详情,可以使用嵌套的三 ...
- 【Swift学习】Swift编程之旅---可选链(二十一)
可选链Optional Chaining是一种可以在当前值可能为nil的可选值上请求和调用属性.方法及下标的方法.如果可选值有值,那么调用就会成功:如果可选值是nil,那么调用将返回nil.多个调用可 ...
- script和template里可选链运算符?.报错Syntax Error: Unexpected token (64:2)
前情:babel-core@6.2.3, vue@2.7.14 试过的方法:1.安装@babel/plugin-proposal-optional-chaining,设置.babelrc文件如下,报 ...
- ES新提案:双问号操作符
摘要: 简单实用的新特性. 原文:ES新提案:双问号操作符 译者:前端小智 本文主要讲Gabriel Isenberg撰写的ES提案"Nullish coalescing for JavaS ...
- C#中双问号、双冒号等几个特殊关键字
1.@ 这个东东看似和邮件有关啊,但是在C#的世界里,可跟邮件没有一毛钱关系,它是string的女朋友(当然了string有N多女友),二者结合就可以发挥作用了.你可以给它起个名字,叫做“逐字字符串” ...
- swift学习笔记之-可选链式调用
//可选链式调用 import UIKit /*可选链式调用(Optional Chaining) 1.在可选值上请求和调用该可选值的属性.方法及下标的方法,如果可选值有值,那么调用就会成功,返回可选 ...
- 学习Swift -- 可选链
可空链式调用 可空链式调用是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这 ...
- Swift 可选链-备
在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类, ...
随机推荐
- CF580C
说句实话,这道题作为蓝题过于简单了一点 #include<iostream> #include<utility> #include<vector> using na ...
- 重磅集结!CNCF/VMware/PingCAP/网易数帆/阿里云联合出品云原生生态大会
"云原生(Cloud Native)"这个词在2020年刷屏了.在企业积极进行数字化转型,全面提升效率的今天,云原生被认为是云计算的"下一个时代". 12月16 ...
- git将某个开发分支最近的提交合并成一个提交
你可以使用 `git merge --squash` 命令将某个开发分支最近的提交合并成一个提交. 具体步骤如下: 1. 切换到你想要合并的分支上,比如 `develop` 分支: `git chec ...
- PHP 使用非对称加密算法
加密的类型: 在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文.目前主流加密手段大致可分为单向加密和双向加密. 单向加密:通过对数据进行摘要计算生成密文 ...
- oeasy教您玩转vim - 3 - # 打开文件
打开文件 回忆上节课内容 什么不会,就 :help 什么 命令有完整和简写两种模式 :help 和 :h :quit 和 :q 注意:是左右手小拇指配合输入的 vim 有 6 种基本模式 但是我们还没 ...
- oeasy教您玩转vim - 49 - # 命令进阶
命令进阶 回忆上节课内容 我们上次研究vim的历史 为什么会有行编辑器这种东西 竟然是当年 没有显示器只有纸的时代的无奈之举 vim进化到今天 依然还有好多人使用 而且ssh连接的时候直接vim就 ...
- oeasy教您玩转vim - 31 - # 文字区块
文字区块 回忆上节课内容 上上次讲的翻页 上次先让屏幕位置固定,移动光标 H- Head 移动到屏幕的顶端 M- Middle 移动到屏幕的中间 L- Low 移动到屏幕的底部 然后让光标固定,移 ...
- Microsoft Azure AI 机器学习笔记-1
机器学习基础: 数据与建模: 数据统计和数学建模是处理数据和描述现实情况的关键工具. 观测值是记录的数据实例,而特征是描述观测对象的属性. 标签则代表监督式学习中的已知输出值. 学习类型: 监督式学习 ...
- 基础-数组_C语言
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比如 runoob0. ...
- Python 插件式程序设计与开发实践总结
插件式程序设计与开发实践总结 By:授客 QQ:1033553122 开发环境 win 10 python 3.6.5 代码结构