Js 新特性:可选链

为什么我们需要它

const person = {
    details: {
        name: {
            firstName: "xiaoming",
            lastName: "xiaohua",
        }
    }
}
const personFirstName = person.details.name.firstName;

如上,为了获取firstName ,我们会这么获取,但是如果不知道firstName是否存在的情况时可能导致报错undefined,所以一般都会加上判断来获取:

if( person && person.details && person.details.name ) {
        const personFirstName = person.details.name.firstName || ‘123’;
}

|| 代表 如果irstName undefined时则取默认值 ‘123’。

为了简便来做可以用可选链来做:

const personFirstName = person?.details?.name?.firstName;

默认值

然后取默认值的话是:

const personFirstName = person?.details?.name?.firstName ?? 'stranger';

以上内容:这个运算符就是 ??,如果它左侧表达式的结果是 undefined,firstName,就会取右侧的 stranger。

特别注意
这种 如果是 || 时候结果就是无,正常来说应该是0才对!!!所有用 ?? 号可以解决这种问题

我的工资:<span id= "salary"></span>
window.onload = function(){
   const salary= 0;
   document.getElementId('salary').innserHtml == salary ?? '无' 
}

赋值

如果x为null或者为undefined则会把8赋值给x.

 x??=8

动态属性

const name= 'name';
const secondJob = person?.details?.[name] ?? ‘’;

函数方法

const currentDetails = person?.getDetails?.() ?? '';

兼容性

新特性 兼容性很差 可以用babel类插件来兼容它 如 babel-plugin-proposal-optional-chaining

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值