Javascript 使用可选的链接操作符访问对象属性

Javascript 使用可选的链接操作符访问对象属性,javascript,typescript,optional-chaining,Javascript,Typescript,Optional Chaining,TypeScript 3.7现在支持。因此,您可以编写如下代码: const value = a?.b?.c; 也就是说,您可以使用此运算符访问对象的属性,其中对象本身可能是null或未定义的。现在我想做的基本相同,但属性名称是动态的: const value = a?[b]?.c; 但是,我得到了一个语法错误: 错误TS1005:“:”应为 我做错了什么?这可能吗 PS:The似乎暗示在使用括号符号和可选链接访问属性时,这是不可能的,除了括号外,还需要有一个点: const value =

TypeScript 3.7现在支持。因此,您可以编写如下代码:

const value = a?.b?.c;
也就是说,您可以使用此运算符访问对象的属性,其中对象本身可能是
null
未定义的
。现在我想做的基本相同,但属性名称是动态的:

const value = a?[b]?.c;
但是,我得到了一个语法错误:

错误TS1005:“:”应为

我做错了什么?这可能吗


PS:The似乎暗示在使用括号符号和可选链接访问属性时,这是不可能的,除了括号外,还需要有一个点:

const value = a?.[b]?.c;
这是所采用的语法,因为否则解析器很难判断此
是三元表达式的一部分还是可选链接的一部分。

可选链接运算符是
?。
下面是一些可空属性和函数处理的示例

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

你没抓住重点,操作符是
?。
是的,当然,非常感谢,我会用“不可能”替换它。@vol7ron为什么会这样-我想它可以期待
它将无法区分,尤其是当有错误时。@anarrayofffunctions不会发生。语言中已经有一些地方可以用这种前瞻性的方法解决问题。只要想想语句
function(){}
{a:1}.a都是语法错误。另外:嵌套三元组已经很难解析了(什么是
a?[…b][1]?c:d?.e:f
的意思)。最好不要让超负荷的
,你救了我的命,谢谢!