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请检查这是否解决了您的问题,如果您有任何问题,请告诉我。