可选链运算符(?.)的连续性

可选链运算符(?.)的连续性

可选链运算符(?.)允许读取位于连接对象链深处的属性的值。在引用为空的情况下不会引起错误,该表达式短路返回值是 undefined

因为返回值是 undefined,所以后续的.对于 undefined不存在的方法或对象同样需要使用可选链运算符(?.)。

eg:

// 对于对象
shopData: [
        {
          name: "点菜",
          data: {
            content: "点菜",
            items: [
              {
                text: "热销套餐",
                children: [
                  xxx
                ],
              },
              {
                text: "超级折扣",
                children: [
                  xxx
                ],
              },
            ],
          },
        },
        {
          name: "评价",
          data: {
            content: "评价",
          },
        },
        {
          name: "商家",
          data: {
            content: "商家",
          },
        },
      ],

要遍历两个children下的内容,需要

shopData.forEach((item) => {
        item.data?.items?.forEach((item) => {
          item.children.forEach((item) => {
             xxx
          });
        });
      });

item.data?.items 表面看,已经选到(或者确定)了 点菜 下的 items,该 items是个数组,接着调用确定的数组的.forEach方法为什么还要加.?呢?
因为此时的data结构:

(property) data: {
    content: string;
    items: {
        text: string;
        children: {
            xxx
        }[];
    }[];
} | {
    content: string;
    items?: unknown;
}

可以看到后面两个不存在itemsdata 并不是说消失了,仍然被遍历且有一个类型为unknownitems

如果此时直接.forEach,会报Property 'forEach' does not exist on type 'unknown'.,因为显然unknown上不存在forEach.

个人理解浅显,如有错误还请指教。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值