es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構(destructuring)。
下面介紹的是陣列、物件、字串、數值和布林值、函式引數的解構賦值。
1、模式匹配:只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值。
//以前
let a = 1;
let b = 2;
let c = 3;
//es6
let [a, b, c] = [1, 2, 3];
說明:這種寫法屬於「模式匹配」,只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值。
2、左》右,解構不成功,變數的值就等於undefined。
let [foo] = ;
let [bar, foo] = [1];
//foo的值都會等於undefined
3、左《右:不完全解構,即等號左邊的模式,只匹配一部分的等號右邊的陣列,解構依然可以成功。
let [x, y] = [1, 2, 3];
x // 1
y // 2
let [a, [b], d] = [1, [2, 3], 4];
a // 1
b // 2
d // 4
4、預設值
let [foo = true] = ;
foo // true
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
1、物件的解構與陣列有乙個重要的不同:物件的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。
let = ;
foo // "aaa"
bar // "bbb"
let = ;
baz // undefined
2、 物件的解構賦值的內部機制,是先找到同名屬性,然後再賦給對應的變數。真正被賦值的是後者,而不是前者。
let = ;
baz // "aaa"
foo // error: foo is not defined
//上面物件的解構賦值是下面形式的簡寫:
let = ;
3、預設值:
預設值生效的條件是,物件的屬性值嚴格等於undefined。
var = {};
x // 3
var = ;
x // 1
y // 5
var = {};
y // 3
var = ;
y // 5
var = ;
x // 3
var = ;
x // null
此時,字串被轉換成了乙個類似陣列的物件。
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
類似陣列的物件都有乙個length
屬性,因此還可以對這個屬性解構賦值。
let = 'hello';
len // 5
解構賦值時,如果等號右邊是數值和布林值,則會先轉為物件。
解構賦值的規則是,只要等號右邊的值不是物件或陣列,就先將其轉為物件。由於 undefined 和 null 無法轉為物件,所以對它們進行解構賦值,都會報錯。
let = 123;
s === number.prototype.tostring // true
let = true;
s === boolean.prototype.tostring // true
let = undefined; // typeerror
let = null; // typeerror
function add([x, y])
add([1, 2]); // 3
ES6 變數解構
es6允許按照一定的模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 destructuring 語法 let a,b,c 1,2,3 console.log a,b,c 1 2 3 順序 從陣列中取值,按照對應位置,對變數取值,這種寫法屬於 匹配模式 只要等號兩邊模式相同,左邊的變數就會被...
ES6 變數的解構
預設值 let foo true foo true let x,y b a x a y b let x,y b a undefined x a y b es6 內部使用嚴格相等運算子 判斷乙個位置是否有值。所以,如果乙個陣列成員不嚴格等於undefined,預設值是不會生效的。以下三種解構賦值不得使...
ES6 ES6標準let和const語句
es6 新增了let命令,用來宣告變數。它的用法類似於var,但是所宣告的變數,只在let命令所在的 塊內有效。a referenceerror a is not defined.b 1 上面 在 塊之中,分別用let和var宣告了兩個變數。然後在 塊之外呼叫這兩個變數,結果let宣告的變數報錯,v...