首页 > 其他分享 >空值合并运算符 '??'和可选链 "?."

空值合并运算符 '??'和可选链 "?."

时间:2023-02-03 00:44:34浏览次数:50  
标签:空值 undefined 选链 运算符 street let user null

空值合并运算符 ??

解决的问题

考虑以下场景:

let count = 0;
alert(count || 100); // 100

count || 100 首先会检查 count 是否为一个假值,它是 0,确实是假值。所以,|| 运算的结果为第二个参数,100
实际上,计数 0 是一个有效值,它不应该被替换为默认值。我们更希望的情况是在变量的值为 null/undefined 时使用默认值,而空值合并运算符就解决了这个问题.

用法

如果第一个参数不是 null/undefined,则 ?? 返回第一个参数。否则,返回第二个参数

result = a ?? b // 同 result = (a !== null && a !== undefined) ? a : b
  1. 提供默认值

    let user1;
    alert(user1 ?? "匿名"); // 匿名
    
    let user2 = "John";
    alert(user2 ?? "匿名"); // John
    
  2. 从一系列的值中选择出第一个非 null/undefined 的值

    let firstName = null;
    let lastName = null;
    let nickName = "Supercoder";
    
    // 显示第一个已定义的值:
    alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
    

使用注意:

  • 优先级:&& > ?? = ||
  • 禁止将 ?? 运算符与 &&|| 运算符一起使用,除非使用括号明确指定了优先级

可选链 ?.

解决的问题

考虑以下场景:

let user = {}; 
alert(user.address.street); // TypeError: Cannot read properties of undefined (reading 'street')

由于对象user中没有address属性,所以自然访问不到其中的street属性,JavaScript则会直接报错。但实际情况是,我们更希望得到的是 undefined(表示没有 street 属性)而不是一个错误。可选链 ?.就是为了解决这个问题而出现的。

用法

针对result = value?.prop

它的含义与result = value ? value.prop : undefined相同,也就是说:

  • 如果 value 存在(既不为null也不为undefined),则result = value.prop
  • 否则(当 valueundefined/null 时)则result = undefined
  1. 安全地访问对象的嵌套属性

    let user = {}; 
    alert( user.address?.street ); // undefined(不报错)
    

使用注意:

  • 我们应该只将 ?. 使用在一些东西可以不存在的地方,否则可能会导致代码中的错误在不应该被消除的地方消除了。比如使用user.address?.street时,我们的意图应该是user对象必须存在,但address是可有可无的;而user?.address?.street则保证了连user都是可有可无的,但实际情况可能是user必须存在

标签:空值,undefined,选链,运算符,street,let,user,null
From: https://www.cnblogs.com/jiangyile/p/17087843.html

相关文章

  • Matlab-运算符
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • 运算符
    publicclassDemo1{publicstaticvoidmain(String[]args){//自增(自减与自增相似)inta=10;intb=a++;//执行完这行代码后,先给b赋值,再自......
  • EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等
    原文链接:https://blog.csdn.net/xuemanqianshan/article/details/111415364 1EXCEL里的几种空值:blank,“”,01.1EXCEL里,一般有两种空值:blank,“”1.1.1空值blank空值:b......
  • 运算符
    运算符:关系运算符:>,<,>=,<=,==,!=,instanceof逻辑运算符:&&,||,!条件运算符:?:扩展赋值运算符:+=,-=,*=,/=//幂运算2^32*2*2=8很多运算,我们会使用一些工具类来操作doublepo......
  • JavaScript逻辑运算符:与(&&)和或(||)
    前置知识:在javascript的逻辑运算中,0、""、null、undefined和NaN都会判定为false,其它都为true或||用于判断运算的操作数可以是任意类型的值。操作数是布尔值时,除了两......
  • 23三元运算符
    packagechapter02;publicclassJava04_Operator04{publicstaticvoidmain(String[]args){//TODO运算符-三元运算符//三元运算符指三个元......
  • 22逻辑运算符
    packagechapter02;publicclassJava04_Operator03{publicstaticvoidmain(String[]args){//TODO运算符-逻辑运算符//逻辑运算符指描述多......
  • 20赋值运算符
    packagechapter02;publicclassJava04_Operator01{publicstaticvoidmain(String[]args){//TODO运算符-赋值运算符//等号就是赋值运算符......
  • C# DataTable中Compute方法用法集锦(数值/字符串/运算符/表等操作)
    DataTabledt=newDataTable();//嵌套的三元运算牛叉到五体投地objectobj=dt.Compute("iif(1000=5,1000,iif(100>100,4001,2000))",null);Response.Write(obj);......
  • EL获取域中存储的值List集合&Map集合值和EL_empty运算符&隐士对象pageContext
    EL_获取域中存储的值List集合&Map集合值List集合:${域名称.键名[索引]}<%Useruser=newUser();user.setName("张三");user.setAge(23);......