当至少一个变量已经声明,而至少一个还没有声明时,我可以对多个变量进行析构函数吗



我知道我可以将一个对象或数组解构为多个变量,无论它们是已赋值的还是未赋值的,但当至少一个变量已声明,而至少一个尚未声明时,是否可以将其重组为多个变元?

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

最新更新