ECMAScript6 2 變數的解構賦值

2022-03-28 11:39:59 字數 3940 閱讀 9538

// (1)對陣列變數賦值

let [foo, [[bar], baz]] = [1, [[2], 3]];

foo; // 1

bar; // 2

baz; // 3

let [, , third1] = ["foo", "bar", "baz"];

third1; // "baz"

let [aa, , bb] = [1, 2, 3];

aa; // 1

bb; // 3

let [head, ...tail] = [1, 2, 3, 4];

head; // 1

tail; // [2, 3, 4]

//(2)解構不成功(變數數 > 賦值數) 1.

let [x, y, ...z] = ["a"];

x; // "a"

y; // undefined

z; //

//解構不成功 2.

let [foo1] = ;

let [bar1, foo2] = [1];

foo1; // undefined

bar1; // 1

foo2; // undefined

//(3)解構不完全(變數數 < 賦值數) 1.

let [x1, y1] = [1, 2, 3];

x1; // 1

y1; // 2

//解構不完全 2.

let [a, [b], d] = [1, [2, 3], 4];

a; // 1

b; // 2

d; // 4

//(4)如果等號的右邊不是陣列-->報錯

// let [foo] = 1;

// let [foo] = false;

// let [foo] = nan;

// let [foo] = undefined;

// let [foo] = null;

// let [foo] = {};

//(5) set 結構,也可以使用陣列的解構賦值

let [e, f, g] = new set(["a", "b", "c"]);

e; // "a"

f; // "b"

g; // "c"

// (6) 只要某種資料結構具有 iterator 介面,都可以採用陣列形式的解構賦值。

function* fibs()

}let [first, second, third, fourth, fifth, sixth] = fibs();

sixth; // 5

// (2)es6 內部使用嚴格相等運算子(===),判斷乙個位置是否有值。只有當乙個陣列成員嚴格等於undefined,預設值才會生效。

// (3)預設值是乙個表示式,那麼這個表示式是惰性求值的,即只有在用到的時候,才會求值。

function f()

let [x = f()] = [1];

x;//等價於上面 let [x = f()] = [1];

let y;

if ([1][0] === undefined) else

// (4)預設值可以引用解構賦值的其他變數,但該變數必須已經宣告。

let [c = 1, d = c] = ; // c=1; d=1

let [e = 1, g = e] = [2]; // e=2; g=2

let [h = 1, i = h] = [1, 2]; // h=1; i=2

let [j = k, k = 1] = ; // referenceerror: k is not defined -> k沒有宣告

//(1) 基礎用法

= ; //等價於 let = ;

foo; // "aaa"

bar; // "bbb"

}//(2) 變數名與屬性名不一致:錯誤寫法

= ;foo; // "aaa"

bar; // "bbb"

let = ;

baz; // undefined

}//(3) 變數名與屬性名不一致:正確寫法

= ;baz; // "aaa"

// foo是匹配的模式,baz才是變數。真正被賦值的是變數baz,而不是模式foo。

let obj = ;

let = obj;

f; // 'hello'

l; // 'world'

}//(4) 巢狀結構:陣列一樣,解構也可以用於巢狀結構的物件。 這時p是模式,不是變數,因此不會被賦值]};

let ]

} = obj;

x; // "hello"

y; // "world"

}//(5) 巢狀結構:如果p也要作為變數賦值,可以寫成下面這樣。]};

let ]

} = obj;

x; // "hello"

y; // "world"

p; // ["hello", ]

}//(6) 只有line是變數,loc和start都是模式}};

let ,

loc:

}} = node;

line; // 1

loc; // object

start; // object

}//(7) 巢狀賦值:

;let arr = ;

( = );

obj; //

arr; // [true]

}//(8) 預設值

= {};

x; // 3

var = ;

a; // 1

b; // 5

var = {};

d; // 3

var = ;

f; // 5

var = {};

msg; // "something went wrong"

}//(9) 預設值生效的條件是,物件的屬性值嚴格等於undefined。

= ;x; // 3

var = ;

y; // null

}//(10) 解構失敗

= ;foo; // undefined

}//(11) 巢狀的物件,而且子物件所在的父屬性不存在

// } = ;

//// 對上面的解讀

// let _tmp = ;

// _tmp.foo.bar; // 報錯 _tmp.foo = undefined 再取子屬性就會報錯

}//(12) 已經宣告的變數用於解構賦值

= ; 這裡 被理解為**塊

// 正確的寫法

( = );

console.log(x);

// syntaxerror: syntax error

}//(13) 解構賦值允許等號左邊的模式之中,不放置任何變數名 -> 雖然毫無意義,但是語法是合法的,可以執行。

= [true, false]);

({} = "abc");

({} = );

}//(14) **將math物件的對數、正弦、余弦三個方法,賦值到對應的變數上,使用起來就會方便很多。

let = math;

console.log(sin); //sin()

console.log(pi);

//(15) 由於陣列本質是特殊的物件,因此可以對陣列進行物件屬性的解構。

//上面**對陣列進行物件解構。陣列arr的0鍵對應的值是1,[arr.length - 1]就是2鍵,對應的值是3。方括號這種寫法,屬於「屬性名表示式」

let arr = [1, 2, 3];

let = arr;

first; // 1

last; // 3

ECMAScript中變數的解構賦值

ecmascript中變數的解構賦值 es6 允許從陣列和物件中提取值,對變數進行賦值。解構賦值的基本用法 1 陣列的解構賦值 let a,b,c 1,2,3 console.log a 1 console.log b 2 console.log c 3 2 物件的解構賦值 let console....

ECMA Script 6 變數的解構賦值

1 陣列的結構和賦值 es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 2 物件等可以這麼賦值 3 函式引數的解構賦值 function add x,y add 1,2 3 基本用途 交換變數 a,b b,a 函式返回多個值 類似於陣列 返回乙個陣列 function e...

ECMAScript變數訪問與傳遞引數

ecmascript變數包含兩種不同的型別的資料原始值和引用值。原始值就是最簡單的資料 undefined,null,boolean,number,string,symbol 引用值是由多個值構成的物件 object 儲存原始值的變數是按值訪問的,因為我們操作的就是儲存在變數中的實際值。引用值是儲存...