当使用方括号和可选链访问属性时,除了方括号外,还需要使用点号:
const value = a?.[b]?.c;
?
是否属于三元表达式或可选链接的一部分。?
,而是?.
。如果要使用可选链接,则必须同时使用这两个字符。:
- AnArrayOfFunctionsfunction(){};
或 {a: 1}.a;
都是语法错误。此外:嵌套的三元运算符已经很难解析了(a?[...b][1]?c:d?.e:f
是什么意思)。最好不要通过重载 ?
来使它更加困难。 - Roberta.[b].c
那样运行链接,所以只有遇到问题并在网上搜索的人才会发现a?.[b]?.c
。也许可以提出一个建议来启用a.[b].c
链接语法? - bsplosion?.
以下是一些用于处理可空属性和函数的示例。
const example = {a: ["first", {b:3}, false]}
// Properties
example?.a // ["first", {b:3}, false]
example?.b // undefined
// Dynamic properties ?.[]
example?.a?.[0] // "first"
example?.a?.[1]?.a // undefined
example?.a?.[1]?.b // 3
// Functions ?.()
null?.() // undefined
validFunction?.() // result
(() => {return 1})?.() // 1
??
(空值合并)可用于在未定义或为空时设置默认值。
const notNull = possiblyNull ?? defaultValue
const alsoNotNull = a?.b?.c ?? possiblyNullFallback ?? defaultValue
a?.b?.c ?? default
和 a?.b?.c || default
时有什么区别吗? - nick||
检查所有假值(falsy values),因此 ''
、0
和 false
都将使用默认值,而 ??
仅在出现 null
和 undefined
时使用默认值。 - Gibolt
?.
. - zessx