解構是ES6新加的解構功能,可使得咱們獲取數據更方便,從而提升平常編碼效率。
解構能夠用於對象,也能夠用於數組,這篇文章咱們只講在對象類型上使用解構能夠作哪些事情:
一:解構用於變量聲明node
let node = { name: 'mike', age: 25 }; let {name, age} = node; console.log(name); // mike console.log(age); // 25
let/const/var 後面跟上用一對{}包裹的變量列表,變量名與對象屬性名相同,則就會取對象屬性對應的值初始化變量。 數組
二:解構用於變量賦值編碼
let node = { name: 'mike', age: 25 }; name = 'lily'; age = 20; console.log(name); // lily console.log(age);//20 ({name, age} = node); console.log(name);//mike console.log(age);//25
以上代碼的邏輯爲:預先定義的變量name和age分別被初始化爲'lily'和20以後,又用node對象的屬性,從新賦值給name和age變量。解構賦值的語法要求,必定要用一對小括號()包裹整個解構賦值表達式。code
三:給解構的變量設置默認值對象
let node = { name: 'mike', age: 25 }; let {name, age, country = 'China'} = node; console.log(name); // mike console.log(age); // 25 console.log(country); // China
若是咱們在解構聲明變量時,定義了對象中不存在的屬性,那麼這個變量的值爲undefined
。咱們能夠給變量設置默認值,當對象中沒有對應的屬性時,這個變量的值就是設置的默認值。console
四:解構對象屬性賦值給不一樣名變量
在前面的例子裏,咱們的變量名都是和對象的屬性名同樣的。固然,也有辦法定義不一樣命中的變量,依然利用解構得到對象的屬性值。ast
let node = { name: 'mike', age: 25 }; let {name: localName, age, country: localCountry = 'China'} = node; console.log(localName); //mike console.log(age); // 25 console.log(localCountry); //China
這裏須要注意的是,冒號左邊的是對象的屬性名,右邊的是咱們新定義的變量名,這一點與咱們的認知和習慣剛好反過來了。
咱們在這種場景下也能夠給變量設置默認值,就像上面的localCountry變量那樣作::
左邊是對象的屬性名,右邊是一個賦值表達式; 這個表達式=
左邊是變量名,右邊是默認值。
五:嵌套對象的解構
前面咱們全部的例子,被解構的對象都是單層解構,接下來咱們看看多層對象(嵌套對象)的解構:效率
let node = { personalInfo: { basicInfo: { name: 'mike', age: 25 } }, level: 3 }; let { personalInfo: { basicInfo } } = node; console.log(basicInfo.name);// mike
上面代碼的倒數第二行,咱們初始化的變量爲basicInfo
,而不是personalInfo
,這一點要特別注意。personalInfo只是用來指明basicInfo的父節點。
嵌套對象的解構的語法就是:從原對象的最外層變量定位,一直到須要取值的那一層,每層之間用冒號:
隔開,變量在冒號的右邊。咱們在上面的例子機場上,再增長一層:變量
let node = { personalInfo: { basicInfo: { name: { firstName: 'mike', lastName: 'deep' }, age: 25 } }, level: 3 }; let { personalInfo: {basicInfo: {name}} } = node; console.log(name.firstName);// mike
以上,就是解構在對象數據的使用。下一篇,咱們講解構在Array類型數據上的解構。語法