我知道我可以将一个对象或数组解构为多个变量,无论它们都已分配还是未分配,但是当至少一个变量已经被声明时,是否可以一起重构多个变量,并且至少一个有没有?
1. 两者都未分配
这有效✅</p>
let [a, b] = [1, 2];
2. 均已分配
这也有效✅</p>
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