选择链接不适用于 array.length === x

pan*_*ake 3 javascript

let products;

if (products?.length !== 0) {
  console.log('true')
}
Run Code Online (Sandbox Code Playgroud)

let products;

if (products && products.length !== 0) {
  console.log('true')
}
Run Code Online (Sandbox Code Playgroud)

如果没有产品数组,示例 1 仍将运行 if 语句。可选链不应该检查产品是否存在,然后检查长度,最后检查长度为 0 吗?

例子。如果产品不存在,2 将不会运行。

Cer*_*nce 14

可选链接并不优先于比较。这

if (products?.length !== 0) {
Run Code Online (Sandbox Code Playgroud)

if ((products?.length) !== 0) {
Run Code Online (Sandbox Code Playgroud)

它评估链,然后将结果与 0 进行比较。如果链末尾有一个值,则会对其进行比较。如果链由于某些内容为空而失败,它将评估为undefined,并将0 进行比较。

if ((undefined) !== 0) {
Run Code Online (Sandbox Code Playgroud)

这永远是真的。

由于您希望块products存在且不为空时运行,因此使用

if (products?.length) {
Run Code Online (Sandbox Code Playgroud)