ES6解構賦值

2021-09-11 10:22:33 字數 1787 閱讀 1647

es6允許按照一定模式從陣列和物件中提取值,然後對變數進行賦值,這被稱為解構;

//es5多個變數賦值

var a = 1;

var b = 2;

var c = 3;

//es6使用陣列解構賦值給多個變數賦值,與上述**有相同的賦值效果;

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

//解構賦值是從陣列中提取值,並按照位置給變數賦值,可以設定預設值,若解構不成功值為undefined

let [a=111,b,c] = [,23,]; // a=111, b=23 ,c=undefined

注意:解構賦值是從陣列中提取值,並按照位置給變數賦值,可以設定預設值,若解構不成功值為undefined;

//簡單的物件解構賦值

let = ; // name = 'sisi', age = 12

//複雜的物件解構賦值

let = ;//其中,foo為模式,abc為變數,賦值給變數即abc, abc=eee;

const node =

}};let , loc: } } = node;

//賦值結果:line = 1 ,start = object ,loc = object

//真正賦值的是冒號後面的變數,而不是冒號前面的模式;最後一次對line的賦值中start、loc都是模式,只有line是變數

let [a,b,c,d,e] = 'hello'; //a='h',b='e',c='l',d='l',e='o'
// 引數預設值

//傳統js

function foo (val)

//es6 效果相同

function foo (val = 'lll')

注意區分以下兩種函式引數預設值的設定情況

// 情況一 

function foo1 ( = {})

// 情況二

function foo2 ( = )

foo1(); // ['kk',12]

foo2(); // ['kk',12]

foo1({}); // ['kk',12]

foo2({}); // [undefined,undefined]

foo1(); // ['sisi',12]

foo2(); // ['sisi',undefined]

foo1(); // ['sisi',15]

foo2(); // ['sisi',15]

上述兩個函式都給引數設定了預設值,但在呼叫函式時傳入不同引數,得出結果卻又所不同,這是為什麼呢?

先來分析物件的解構賦值過程,這個問題比較容易理解:

1. 這兩個函式引數裡面等號左邊的是引數,等號右邊的是賦值;

2. 當函式傳入引數時,會對傳入引數進行解構,當解構失敗時,會設定為等式左邊的預設值;

3. 在foo1中,給變數 name 和age 指定了預設值,給函式設定的預設引數為空物件,所以當傳入引數為時,age屬性解構失敗,會預設等於等式左邊的值即12;

4. 但在foo2中,可以看為給函式預設傳入乙個物件,當呼叫函式,重新給函式傳入物件時,預設傳入物件將失效,並對傳入的物件進行解構賦值。

foo2({}); // [undefined,undefined]

// 等效為

function foo2 ( = {})

foo1( = )

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解構賦值

coding changes the world accumulating makes yourself 主要從三個方面講述 陣列式的解構賦值 物件式的解構賦值 函式中的解構賦值 preface 現今的變數宣告語法十分的直接 左邊是乙個變數名,右邊可以是乙個陣列 的表示式或乙個物件 的表示式,等等。...