Javascript 为数组设置新值';使用destructure的s值

Javascript 为数组设置新值';使用destructure的s值,javascript,arrays,code-structure,Javascript,Arrays,Code Structure,我有两个关于数组的非结构化问题: 第一个问题:在分解对象时,我可以定义一个新值或一个新键,或者两者都定义。在数组上,是否可以添加新值而不添加新键 const obj = {a: undefined, b:2}; const {a = 3, b} = obj; console.log(a); // 3 我想知道是否有一个版本的这个,但与数组代替 第二个问题:是否可以不为对象提供默认值?考虑到这一点,我认为不可能使用destructure更改默认值 const obj = [1, {a: 1, b

我有两个关于数组的非结构化问题:

第一个问题:在分解对象时,我可以定义一个新值或一个新键,或者两者都定义。在数组上,是否可以添加新值而不添加新键

const obj = {a: undefined, b:2};
const {a = 3, b} = obj;
console.log(a); // 3
我想知道是否有一个版本的这个,但与数组代替

第二个问题:是否可以不为对象提供默认值?考虑到这一点,我认为不可能使用destructure更改默认值

const obj = [1, {a: 1, b:2}, 3, 4];
const [, object, three, four] = obj;
console.log(object); //{a: 1, b:2}
在本例中,
object
返回
{a:1,b:2}
,但我希望它改为更改值。可能吗


谢谢,您好。

您将默认值与值的突变混淆,将值分配给变量与对象的突变混淆。下面是destructuring的默认值特性的演示,并附有注释来解释该行为

您将在这里看到,一般来说,解构不是为对象的变异而设计的,而是为变量和值的提取而设计的。希望也能理解为什么即使有可能,也不希望将突变混入其中

constobj=[1,{a:1,b:2,99:'z'},3,4,{mutateme:1}];
常量[,{a=3,b=4,c=5},object={a:7,b:7},三,四,object2]=obj;
//a道具的值为1,b道具的值为2,c未定义使用默认值5
console.log(a、b、c、object);
//对象为空,请使用默认值={a:7,b:7}
//obj不变
控制台日志(obj)
//mutate object2={mutateme:1}通过引用(类似于指针)
对象2.mutateme=7
//{mutateme:1=>7}
控制台日志(obj)
//示例说明如何(某种程度上)在destructuring语句中进行变异
//计算属性,obj[1]=obj[3]=99返回99,
//因此,将属性99提取到变量z,并将索引[1]和[3]处的对象obj变为=99
//你现在99岁了。
常数[y1,{[obj[1]=obj[3]=99]:z},y2]=obj
控制台日志(y1、z、y2)
//如果在解构语法中内置了类似的东西,

//您能想象它会变得多么混乱,并导致各种意外行为吗?
您为什么希望它更改值?您应该只使用直接赋值-
obj[1]=newVal
a=3是默认值的语法。请注意,a==3,但obj.a==未定义。它不会更改原始对象的值。不为突变对象进行分解。构造和解构通常不是为改变对象而设计的