!contractList?.length 的执行顺序

17 阅读1分钟

简单来说,?.(可选链)会先执行,然后才是 !(逻辑非)

这个表达式 !contractList?.length 的执行过程可以拆解为两步:

1. 第一步:执行 contractList?.length

?.可选链操作符。它的作用是安全地访问属性。

  • 如果 contractListnullundefined,它会直接停止并返回 undefined
  • 如果 contractList 是一个数组,它会返回数组的长度(比如 0, 1, 2...)。

2. 第二步:执行 !

!逻辑非操作符。它会将前面的结果转换成布尔值并取反。

  • 如果第一步结果是 undefined (即原数据是 null/undefined): !undefinedtrue
  • 如果第一步结果是 0 (即原数据是空数组 []): !0true
  • 如果第一步结果是 3 (即原数据是有3个元素的数组): !3false

总结

所以 !contractList?.length 这句代码翻译成白话就是: “如果 contractList 不存在,或者它的长度为 0,那么...”

它完美覆盖了我们想要判断的所有“无数据”场景:

  1. undefined (没传) ➜ true
  2. null (空值) ➜ true
  3. [] (空数组) ➜ true