js中“??“和“?.“用法小结

 更新时间:2023年11月21日 10:21:34   作者:wyy爱学习  
这篇文章主要介绍了js中“??“和“?.“用法小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

js中“??“和“?.“怎么用

??:空值合并操作符

逻辑操作符,左侧为null和undefined时,才返回右侧的数

const sum = null ?? 12
console.log(sum);
//输出12
const sum1 = 12 ?? 23
console.log(sum1);
//输出12
const sum2 = undefined ?? 12
console.log(sum2);
//输出12

?. :可选链操作符

可以读取位于连接对象链深处属性的值,不必明确验证链中的每个引用是否有效
功能类似于“.” 链式操作符,不同之处在于,在引用为空null 或者 undefined 的情况下不会引起错误,该表达式短路返回值是 undefined
与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。

const fa = {
      name: 'lming',
      son: {
        name: 'lqq'
      }
    };
const duc = fa.duc?.name;
console.log(duc);
//输出undefined

使用:

1.获取一个对象更深层次的属性,即obj中的first属性下的second属性。

为了避免报错, 获取之前要判断first属性是否为null或者undefined,在获取second属性
使用“与”运算符

let num = obj.first && obj.first.second;

使用?.可选链操作符

let num = obj.first?.second;

可选链与函数调用

调用一个可能不存在的方法时,如果被调用的方法不存在,使用可选链可以使表达式自动返回undefined而不是抛出一个异常

let result = someInterface.customMethod?.();

注:如果存在一个属性名且不是函数, 使用 ?. 仍然会产生一个 TypeError 异常 (x.y is not a function).

使用空值合并操作符

let customer = {
  name: "Carl",
  details: { age: 82 }
};
let customerCity = customer?.city ?? "暗之城";
console.log(customerCity); // “暗之城”

短路计算

let a = null;
let x = 0;
let prop = a?.[x++];
console.log(x); // x 将不会被递增,依旧输出 0

js中?.、??的具体用法

1、?. (可选链运算符)

在javascript中如果一个值为null、undefined,直接访问下面的属性,
会报 `Uncaught TypeError: Cannot read properties of undefined` 异常错误。

而在真实的项目中是会出现这种情况,有这个值就读这个值,没有这个值也不会报错。

可能有的小伙伴会说用三目运算符、或者if判断,但是这种也是可以的,但是在特定情况下会很复杂(如obj.data.person.name)

而?.则完美解决这个问题(obj?.name?.person?.name)。

 ?. 可以无限链下去,不论有多少属性,只要有最后可以访问到属性,就会直接赋值最后的属性值。否则当任何一个链出现问题,立刻停止,而后赋值undefined。

2、??(空值合并运算符)

?? 双问号后面是默认值(可常量、可变量)。

在 ?? 前面没有值得时候会默认 ?? 后边的值(类似于三木运算符中的:后面赋值)。

和 || 运算符的区别:

|| 只会在左边的值为假值时返回右边的值 (0, ‘’, undefined, null, false 等都为假值)

?? 是在左边的值为undefined或者null时才会返回右边的值

 总结:??是判断有没有值,|| 是判断真假

到此这篇关于js中“??“和“?.“怎么用?的文章就介绍到这了,更多相关js ?? 和?内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js HTML5多媒体影音播放

    js HTML5多媒体影音播放

    这篇文章主要为大家详细介绍了js HTML5多媒体影音播放,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 子窗体与父窗体传值示例js代码

    子窗体与父窗体传值示例js代码

    子窗体与父窗体之见互相传值实现使用中很频繁,本文以一个小示例抛砖引玉,希望大家可以举一反三
    2013-08-08
  • javascript实现表格信息增添与删除

    javascript实现表格信息增添与删除

    这篇文章主要为大家详细介绍了javascript实现表格信息增添与删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • JavaScript的原型继承详解

    JavaScript的原型继承详解

    这篇文章主要详细介绍了JavaScript的原型继承的相关资料,十分详细,需要的朋友可以参考下
    2015-02-02
  • JS中正则表达式只有3种匹配模式(没有单行模式)详解

    JS中正则表达式只有3种匹配模式(没有单行模式)详解

    下面小编就为大家带来一篇JS中正则表达式只有3种匹配模式(没有单行模式)详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • js每隔两秒输出数组中的一项(实例)

    js每隔两秒输出数组中的一项(实例)

    下面小编就为大家带来一篇js每隔两秒输出数组中的一项(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • js数组相减简单示例【删除a数组所有与b数组相同元素】

    js数组相减简单示例【删除a数组所有与b数组相同元素】

    这篇文章主要介绍了js数组相减,结合简单示例形式分析了JavaScript删除a数组所有与b数组相同元素相关个遍历、判断、删除等相关操作技巧,需要的朋友可以参考下
    2020-03-03
  • 基于Three.js制作一个3D中国地图

    基于Three.js制作一个3D中国地图

    这篇文章主要为大家介绍一个用Three.js制作的3D中国地图,文中的示例代码讲解详细,对我们学习three.js有一定帮助,感兴趣的可以跟随小编一起试一试
    2022-01-01
  • uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战

    uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战

    使用uni.$emit触发事件后,对应的uni.$on就会监听到事件触发,在回调中去执行相关的逻辑,下面这篇文章主要给大家介绍了关于uniapp跨页面传值uni.$emit和uni.$on的使用及踩坑实战的相关资料,需要的朋友可以参考下
    2023-04-04
  • uni-app实现页面通信EventChannel的操作方法

    uni-app实现页面通信EventChannel的操作方法

    使用了EventBus的方法实现不同页面组件之间的一个通信,在uni-app中,我们也可以使用uni-app API,uni.navigateTo来实现页面间的通信,这篇文章主要介绍了uni-app实现页面通信EventChannel的操作方法,需要的朋友可以参考下
    2024-05-05

最新评论