es6解構賦值

2021-08-10 10:57:06 字數 2838 閱讀 3088

coding changes the world , accumulating makes yourself

主要從三個方面講述:

陣列式的解構賦值

物件式的解構賦值

函式中的解構賦值

// preface

// 現今的變數宣告語法十分的直接:左邊是乙個變數名,右邊可以是乙個陣列:的表示式或乙個物件: 的表示式,等等。解構賦值允許我們將右邊的表示式看起來也像變數宣告一般,然後在左邊將值一一提取

// 1. 陣列解構賦值

// 1.1 傳統方法: 為陣列中元素起乙個 alias

var value = [1,2,3,4,5];

var el1 = value[0],el2 = value[1], el3 = [2];

// 1.2 es6 方法

let value = [1,2,3,4,5];

let [el1,el2,el3] = value; // 對應前三個元素有了 alias

// 1.3 兩個變數交換值的時候 不再需要臨時變數了

[a,b] = [b,a] // 感覺和 python 的路線有點像

// 1.4 解構賦值的套欠

let [el1,el2,[el3,el4]] = [1, 2, [3, 4, 5]];

// 1.5 指定位置的賦值

let [el1,,el3,,el5] = [1,2,3,4,5];

// 1.5.1 example

var [,firstname, lastname] = "john doe".match(/^(\w+) (\w+)$/);

// 1.6 指定預設值:需要注意的是預設值只會在對undefined值起作用(也就是說預設值的時候首先會檢測 右側是否賦值 undefined)

var [firstname = 'john', lastname = 'joe'] = ;

// 1.6.1 下面的值 是 null

var [firstname = "john", lastname = "doe"] = [null, null];

// 1.7 rest 引數,休止符,tail 變數將會接收 陣列的剩餘元素(注意:tail 變數後面不能有其他變數了)

var vlaue = [1,2,3,4,5];

var [el1,el2,el3,...tail] = value;

// 2. 物件的解構賦值

// 與陣列解構賦值的方式幾乎完全一樣

// 可以這樣理解: 陣列是通過位置 序號來賦值的,plainobj 是通過鍵名來賦值的。(本質上陣列的位置,序號也就是鍵名)

// 2.1 物件的解構賦值

var person = ;

var = person;

// 2.2 es6允許變數名與對應的屬性名不一致。這裡相當於宣告了name 和 lastname 兩個變數

var person = ;

var = person;

// let person = ;

// undefined

// let = person

// undefined

// firstname

// vm120: 1 uncaught referenceerror: firstname is not defined

// at:1:1

// 2.3 深層套欠物件賦值,

// note: 此時,name 變數並沒有宣告

var person = };

var } = person;

// 2.4.1 物件包裹陣列

var person = ;

var = person;

// 2.4.2 array is around object

var person = ;

var = person;

// 2.5 obj deconstruction uses default value

// note: 預設值使用的是 賦值符號不是 冒號

var = {};

// 預設值同樣也只會在對undefined值起作用,下面的例子中firstname和lastname也都將是null:

var = ;

// 3.0 函式引數的解構賦值

// es6中,函式的引數也支援解構賦值。這對於有複雜配置引數的函式十分有用。你可以結合使用陣列和物件的解構賦值。

// 3.1傳統寫法

function

finduser

(userid, options)

if (options.includehistory) {}

}// 3.2 es6 寫法(真是太簡潔了)

function

finduser

(userid, )

if (includeprofile) {}

}// supplement

// note: 我們是對變數賦值 所以即使是物件,左邊 一般也是只有鍵沒有 value 的, 如果 物件 deconstruction 時候,value 處有值,那麼 該鍵對應的變數是不會被宣告的

// 有了陣列的解構賦值,多變數同時賦值的寫法改變

// s1.1.1 傳統

var a = 1, b = 2, c =3;

// s1.1.2 es6

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

// 總結: 1. 可以同時宣告多個變數 並且對多個變數進行賦值 2. 對於返回的陣列或者 plainobj 可以直接一次性取值 3. 對於複雜的 物件包裹 取值也不需要不斷的鏈式,直接字面量取值

ES6 解構賦值

陣列的解構賦值 let a,b 12,13 let a,b,c d 13,15,16 let a,b c 78,12 23 let x,y 1,3,5 x 1,y 3 let x,y,z a x a,y undefined z let h,b 1,2,3,4 1,2,3,4 預設值 let x tr...

ES6解構賦值

一 基本用法 解構 destructuring 按照一定的模式,從陣列或者物件中提取值,對變數進行賦值。let par1,par2,par3 1,2 console.log par1,par2,par3 1 2 不完全解構時par3對值為undefined 解構賦值允許指定變數對預設值。let pa...

ES6解構賦值

陣列的解構賦值 陣列的解構賦值需要左邊的變數結構需要等於右邊的值的結構,即給對應位置的變數宣告對應位置的值,變數的取值由位置決定 只要某種資料型別具有迭代器 iterator 介面,就可以使用陣列的解構賦值,不一定非是陣列 es6中具有iterator介面的資料型別有 陣列,類陣列物件,字串,set...