Javascript 使用可选的链接操作符访问对象属性
TypeScript 3.7现在支持。因此,您可以编写如下代码: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 =
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
的意思)。最好不要让超负荷的?
,你救了我的命,谢谢!