1、什么是双问号

双问号是ES2020 的一个新特性,它的作用是,当一个表达式为 null 或 undefined 的时候为变量设置一个默认值。

ECMAScript® 2020 Language Specification

mdn 介绍:Nullish coalescing operator (??) - JavaScript | MDN

2、他和双 || (logical or operator)的区别

我的理解是,双问号是双或的子集。

双或是当左侧表达式为 false 的时候,设置右侧默认值。

强转之后为false的包括:null、undefinded、NAN、’‘、0

但是双问号,就仅仅是 过滤 null 和undefined。

3、应用

根据它的区别就可知,但我们需要过滤掉 0 和空字符串时,可以采用 逻辑或 || ,

当仅仅需要过滤 空值的时候,就 采用 ??

举个例子:

给数组对象排序,结构如下:

export interface GroupData {/** 分组名称 */name: stringdata?: ItemData[]order?: number
}

因为排序 order 是可选项,如果不用 双问号,

则代码为:

data.sort((a,b)=>(a.order ==='undefined' ? 999 : a.order)-(b.order ==='undefined' ? 999 : b.order))

如果使用可选项:

data.sort((a,b)=>(a.order ?? 999)-(b.order ?? 999))

是不是显得代码简单清晰多了。

双问号??在 js 中的应用相关推荐

  1. js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量)...

    js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量) 一.总结 1.html中属性规范是 ...

  2. php 双问号 语法,JS 新语法「可选链」「双问号」已进入 Stage 3

    你可能写过这样的代码 var street = user.address && user.address.street; 复制代码 有了这个新语法,你可以写成 var street = ...

  3. js中双问号??和双竖杠||的区别

    双竖杠||,将前面的值自动转为布尔值并且为false时,就取后面,否则取前面,如undefined.null.false.空字符串和数值0 例:console.log(0||33)打印出33 而双问号 ...

  4. js中,双问号??和双竖杠||的区别

    它们的共同特点是语法一样,前面是值,后面也是值,中间是符号: 都是根据前面的值来决定到底取前面还是取后面. 双竖杠|| : 前面的值转为布尔值为  false 时,就取后面,否则取前面 如undefi ...

  5. vue项目中使用可选链 ( ?. )和双问号 ( ??)详解

    1.安装插件:@babel/plugin-proposal-optional-chaining npm install --save-dev @babel/plugin-proposal-option ...

  6. js 问号点操作符 (可选链 双问号)

    配置使用可选链?. 和 双问号?? 语法 一.什么是可选链 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Oper ...

  7. 【JS】问号点(?.)和双问号(??)的用法

    1. 问号点(?.) 当访问多层对象属性(比如 res.data.list)时,如果属性res.data为空,则会报引用错误,为此我们不得不这么处理: let dataList = res & ...

  8. C#中双问号、双冒号等几个特殊关键字

    @:放在字符串的前面,直接让字符串原样输出.常用于:sql语句.路径等 string sql = @"select * from tablename where id = '1'" ...

  9. js中拼接字符串遇到的单引号、双引号以及转义字符问题

    项目中经常遇到对ajax提交后返回的结果动态显示在页面上,这时候就需要在js中进行字符串的拼接.额...其实普通的拼接字符串并没多大难度系数,只要保证单引号和双引号相间就可以了.但是,如果在拼接字符串 ...

最新文章

  1. oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项
  2. Linux软件包增量升级,Linux增量更新jar包内容
  3. charles 代理手机连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需...
  4. Ways to 优化JAVA程序设计和编码,提高JAVA性能
  5. Android 监听ScrollView的滑动
  6. 学典教育计算机二级,层次化分类的离线中文签名真伪鉴别方法-计算机工程与应用.PDF...
  7. C#多线程学习(六) 互斥对象
  8. vue实现查询多条记录_vue.js 实现天气查询
  9. “2019大数据与实体经济深度融合全国行”盛大启动
  10. 微课|玩转Python轻松过二级(2.4节):常用内置函数用法精要3
  11. linux 驱动器发送信号,Linux设备驱动并发控制详解(自旋锁,信号量)
  12. NYOJ-背包问题(贪心)
  13. membercache java_Java开发中的Memcache原理及实现
  14. 【java笔记】线程间通信(1):等待唤醒机制
  15. 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting、模型融合
  16. Android开发1、2周——GeoQuiz项目
  17. android foobar wifi,foobar2000安卓
  18. java中average方法_Java中的IntStream average()方法
  19. 【计算机网络】网关和路由器功能的有哪些不同
  20. LeetCode-55. 跳跃游戏

热门文章

  1. InnoSetup打包自动签名
  2. python 拆包_python3拆包详解
  3. switch初始化说服务器维护中,switch国行怎么初始化-switch国行初始化教程
  4. 写作套路:如何写论文摘要
  5. 多项logistic回归系数解释_深入解读Logistic回归结果(一):回归系数,OR
  6. ABAP基本语法(一)附带思维导图学习材料等
  7. Lyft押重注于苹果编程语言Swift
  8. 四种属性范围(重点)
  9. 1.4 计算机网络的定义和分类
  10. CRM客户关系管理能给企业带来什么样的效果