解構賦值可將數(shù)組的元素或對象的屬性賦予給另一個變量,該變量的定義語法與數(shù)組字面量或對象字面量很相似。此語法非常簡潔,相比于傳統(tǒng)的屬性訪問方式,更加直觀清晰。
在不使用解構賦值的情況下,通常我們這樣訪問數(shù)組中的元素:
[js] view plaincopy
var first = someArray[0];
var second = someArray[1];
var third = someArray[2];
使用解構賦值后,代碼得到了極大的簡化,同時可讀性也更強:
[js] view plaincopy
var [first, second, third] = someArray;
除了個別特性,解構賦值的大部分特性在SpiderMonkey(Firefox的JavaScript引擎)中都已得到支持,詳見 bug 694100。
上面的例子為我們展示了解構賦值在數(shù)組中的運用,其基本語法形式為:
[js] view plaincopy
[ variable1, variable2, ..., variableN ] = array;
這只是將變量1到變量N分配到數(shù)組相應的元素中。當然,如果想在同一時間對變量進行聲明,可以在賦值前增加相應的關鍵字:var,let或const:
[js] view plaincopy
var [ variable1, variable2, ..., variableN ] = array;
let [ variable1, variable2, ..., variableN ] = array;
const [ variable1, variable2, ..., variableN ] = array;
事實上,變量一詞用的并不準確,因為解構賦值同樣可以用于數(shù)組嵌套的情況(注意:左右兩側的格式應保持一致):
[js] view plaincopy
var [foo, [[bar], baz]] = [1, [[2], 3]];
console.log(foo);
// 1
console.log(bar);
// 2
console.log(baz);
// 3
此外,左側的變量列表還可以一種包含連續(xù)逗號的形式跳過右側對應的值:
[js] view plaincopy
var [,,third] = ["foo", "bar", "baz"];
console.log(third);
// "baz"
ES6中,提供了一種將右側多余的值以數(shù)組的形式賦值給左側變量的語法——“rest“模式:
[js] view plaincopy
var [head, ...tail] = [1, 2, 3, 4];
console.log(tail);
// [2, 3, 4]
無論是訪問數(shù)組外還是數(shù)組中不存在的元素,都會得到相同的結果:undifined:
[js] view plaincopy
console.log([][0]);
// undefined
var [missing] = [];
console.log(missing);
// undefined
注意,數(shù)組賦值模式的解構賦值,同樣也可迭代:
[js] view plaincopy
function* fibs() {
var a = 0;
var b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
var [first, second, third, fourth, fifth, sixth] = fibs();
console.log(sixth);
// 5
在對象中使用解構賦值,允許你為對象的不同屬性綁定變量名。這種情況下,解構賦值的左側部分類似一個對象字面量,對象中是一個名值對的列表,屬性名稱位于名值對內冒號左側,變量名稱位于名值對內冒號右側,每一個屬性都會去右側對象中查找相應的賦值,每一個值都會賦值給它對應的變量:
[js] view plaincopy
var robotA = { name: "Bender" };
var robotB = { name: "Flexo" };
var { name: nameA } = robotA;
var { name: nameB } = robotB;
console.log(nameA);
// "Bender"
console.log(nameB);
// "Flexo"
當屬性名稱和變量名稱相同時,可如下簡寫:
[js] view plaincopy
var { foo, bar } = { foo: "lorem", bar: "ipsum" };
console.log(foo);
// "lorem"
console.log(bar);
// "ipsum"
就像嵌套數(shù)組可用于解構賦值一樣,嵌套對象也可用于解構賦值,并且兩種語法還可以結合在一起使%E
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業(yè)目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。