当至少一个变量已经被声明而至少一个没有被声明时,我可以解构为多个变量吗?

Can I destructure to multiple variables when at least one has already been declared, and at least one has not?

我知道我可以将一个对象或数组解构为多个变量,无论它们是否都已赋值或都未赋值,但是否可以在至少一个变量已声明的情况下一起重组为多个变量,至少有一个没有?

1。均未分配

这个有效 ✅

let [a, b] = [1, 2];

2。均已分配

这也有效✅

let a, b;
[a, b] = [1, 2];

3。至少一项已分配,一项未分配

这不起作用

let a;
[a, b] = [1, 2]; // 
let [a, b] = [1, 2]; // 

我在这里使用的实际用例与此类似——我有一个 URL 路径,我想将其拆分为具有相同变量名及其查询字符串的路径,当一个是目前。

这是我想做的,但出于同样的原因它不起作用。

let urlPath = '/some-path/some-page?parameter=value';

const getUrlParts = url => url.split('?');

[urlPath, urlQueryString] = getUrlParts(urlPath); // 

这是我到目前为止想出的几个解决方法,但它们要么迫使我 运行 函数两次,要么将单个赋值行分成三个单独的行并声明一个新变量只是为了重新分配:

解决方法 #1:执行函数两次

let urlPath = '/some-path/some-page?parameter=value';

const getUrlParts = url => url.split('?');

const urlQueryString = getUrlParts(urlPath)[1];
urlPath = getUrlParts(urlPath)[0];

解决方法 #2:声明临时变量

let urlPath = '/some-path/some-page?parameter=value';

const getUrlParts = url => url.split('?');

const urlSplitData = getUrlParts(urlPath);
// temporary variable created
property = urlSplitData[0];
const urlQueryString = urlSplitData[1];
// temporary variable no longer needed

我不相信有一种方法可以解构为已经定义和尚未定义的变量的组合。但好消息是,您可以简单地提前定义您希望解构成的所有变量:

let urlPath = '/some-path/some-page?parameter=value';
let urlQueryString = '';

const getUrlParts = url => url.split('?');

[urlPath, urlQueryString] = getUrlParts(urlPath);

请注意,这正是您第一次尝试的解决方案,只是我们在解构之前声明了 urlQueryString