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程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类, ...
随机推荐
- [oeasy]python0003_ 终端大冒险_终端命令_whoami_pwd_ls
终端大冒险_终端命令_ls_pwd_whoami 回忆 上次 了解基本环境 简称 含义 CLI 命令行界面 GUI 图形用户界面 在 CLI 中 通过终端 连接 远程服务器的 壳(shell) 控制 ...
- oeasy教您玩转vim - 12 - # 词头词尾
词头词尾 回忆上节课内容 我们这次学了向前一个单词 w 意思是 word 还学习了向后一个单词 b 意思是 backward 这俩命令都落在单词的第一个字母 还有什么好玩的命令吗? 动手练习 我们可以 ...
- 第四节 JMeter基础-初级登录【固定用户登录】
声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 1.认识JMeter (1)测试计划:测试的起点,所有组件的容器.相当于一个测试项目,对测试计划展开一系列的操作. (2)线 ...
- GUN/Linux 基础教程
GUN/Linux 基础教程 控制台 shell 超级用户 root 辅助管理 CLI 软件 文件基础 目录 链接 设备文件 控制台 shell 在启动 Linux 系统后,如果没有安装 GUI 的话 ...
- 题解:CF1971B Different String
题解:CF1971B Different String 题意 给予你一个字符串 \(s\),保证 \(s\) 的长度小于等于 \(10\). 任意排列 \(s\),使其与原 \(s\) 不同. 判断是 ...
- git篇-- Git在项目实操中常见的使用命令--02
Git是现代软件开发中不可或缺的版本控制工具.它能帮助开发者跟踪项目的所有变更,并与团队成员高效协作.本文将介绍一些在项目实操中常见的Git命令,帮助你更好地管理代码. 1. 初始化和配置 初始化仓库 ...
- 【vue3】详解单向数据流,大家千万不用为了某某而某某了。
总览 Vue3 的单向数据流 尽信官网,不如那啥. vue的版本一直在不断更新,内部实现方式也是不断的优化,官网也在不断更新. 既然一切皆在不停地发展,那么我们呢?等着官网更新还是有自己的思考? 我觉 ...
- 【Java】Maven模块化工程SSM整合
创建数据库一个演示表User CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(64) DEFAULT NU ...
- pytorch报错----------- ***ValueError: some of the strides of a given numpy array are negative.
最近遇到的一个pytorch报错: 然后报错了,这个几行代码就是从一个图片中读入数据,把bgr模式图片矩阵转换为rgb模式,这里采用的是改变矩阵索引,索引倒排 [..., ::-1] . ...
- 如果一个windows主机上插两个蓝牙适配器会如何???——由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)——windows主机蓝牙适配器驱动错误排查
事情是这样的,在某鱼上挂了一个蓝牙适配器,是自己多年前买的,给自己的老电脑用的,那一台老电脑主板上没有自带蓝牙,于是就在某东上买了一个蓝牙适配器: 但是这几年新买的电脑都自带蓝牙,于是准备把这个适配器 ...