Javascript 在对象数组中使用可选链接和销毁

Javascript 在对象数组中使用可选链接和销毁,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个这样的物体 constobj=[{a:'a'}] 我可以像这样得到它: const{a}=obj[0]//a 但是如果obj['x']不存在呢 我尝试了可选的链接,但似乎不起作用。 const{a}=obj?[1]您可以使用 const{a}=obj[x]| |{ 如果obj没有属性x,a将被设置为undefined,您离它很近。您应该确保使用空对象回退,以便以后的破坏有意义 constobj=[{a:'a'}]; const{a}=obj?[1]| |{}; log(a)您可以使用

我有一个这样的物体

constobj=[{a:'a'}]

我可以像这样得到它:
const{a}=obj[0]//a

但是如果obj['x']不存在呢

我尝试了可选的链接,但似乎不起作用。
const{a}=obj?[1]

您可以使用

const{a}=obj[x]| |{

如果
obj
没有属性
x
a
将被设置为
undefined

,您离它很近。您应该确保使用空对象回退,以便以后的破坏有意义

constobj=[{a:'a'}];
const{a}=obj?[1]| |{};

log(a)
您可以使用索引作为计算属性和数组缺少项的默认对象构建结构

const
obj=[{a:'a'}],
{[2]:{a}={}}=obj;

控制台日志(a)看看下面三种情况,我使用了可选链接

您需要首先检查数组的第一个元素(索引0)是否存在,然后检查其中是否有字段
a

//案例1:
常量obj1=[{a:“a”}];
console.log(obj1?[0]?.a);//“a”
//案例2:
常量obj2=[{b:b}];
console.log(obj2?[0]?.a);//未定义
//案例3:
常量obj3=[];

console.log(obj3?[0]?.a);//未定义的
当您试图对其进行解构时,它仍然没有帮助(
obj?[1]
返回与
obj[1]
一样的未定义的
),您应该放弃解构并使用简单的属性访问(需要时使用
?。
)或者使用具有默认值的到处解构。添加到@hgb123 answer。如果您想使用null作为默认值而不是未定义的值,您可以只使用const{a=null}=obj?[1]| |{}.@keysl是否也可以这样做
const a=obj?[1]?.a
|124;{}
不需要可选的链接o。O@Andreas有。可选链接与未定义的
obj
有关,或者操作员关心的是,如果
obj[1]
未定义,
obj[1]
将返回什么。@RobertoZvjerković“但是如果obj['x']不存在怎么办?”-因此
obj
存在,但
obj.x
可能不存在。不需要可选的链接。如果我避免使用破坏呢
const a=obj?[1]?.a
,我还需要回退吗?@Andreas除非如果不使用可选链接,您将得到运行时错误,并且
obj
不存在这会更短吗
const a=obj?[1]?.a
omg这太复杂了,如果我使用多个
const a=obj?[1]?.a
不再分解…@JudyAllen请检查这是否解决了您的问题,如果您有任何问题,请告诉我。