一、陣列解構賦值:
var a = 1;
var b = 2;
var c = 3;
解構賦值:
var [a,b,c] = [1,2,3];
let [a,b,c] = new set([1,2,3]);
也可巢狀賦值:
let [foo,[[bar],[baz]]] = [1,[[2],[3]]];
結果:foo // 1; bar // 2; baz // 3;
let [,,third] == ["foo","bar","baz"];
結果:third // "baz";
let [head, ...tail] = [1,2,3,4];
結果:head // 1;
tail // [2,3,4];
let [x, y, ...z] = ['a'];
結果:
x // "a";
y // undefined;
z // ;
如果解構不成功,變數就會等於undefined。
var [foo] == ; foo // undefined
var [bar,foo] == [1]; foo // undefined
不完全解構
let [x,y] = [1,2,3];
x // 1
y // 2
let [a,[b],c] = [1,[2,3],4];
a // 1;
b // 2;
c // 4;
只要某種資料解構具有迭代介面,都可以採用陣列形式的解構賦值。
解構賦值允許指定預設值。
var [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,預設值不會生效。
var [x = 1] = [undefined]; x // 1
var [x = 1] = [null]; x // null
上面如果乙個陣列成員是null,預設值就不會生效,因為null不嚴格等於undefined
解構賦值的惰性取值:
function f();
let [x = f()] = [1];
x // 1
上面**中x可以取到值1,所以就不會執行表示式,所以x = 1,等價於下面**
var x;
if([1][0] === undefined)else
變賦值之前必須宣告
二、物件解構賦值
var = ;
foo // "aaa"
bar // "bbb"
*物件的解構賦值與陣列乙個重要的不同。陣列必須是按次序排列,變數取值由未知決定;
而物件的屬性沒次序,變數必須與屬性同名,才能取到正確的值。例如:
陣列:let [x,y] = [1,2]; // x = 1, y = 2
物件:var = ; // foo = "bbb", bar = "aaa"
var = // baz = "undefined"
如果變數名與屬性名稱不一致;必須寫成下面這樣:
var = ; // baz = "aaa"
let和const不允許重新宣告!
其他同陣列解構賦值。
三、字串解構賦值
const [a,b,c,d,e] = "hello"; // a="h", b="e"... e="o";
類似與陣列物件都有長度(length屬性);因此還可以對這個屬性解構賦值
let = "hello"; // len = 5
四、數值和布林值得解構賦值
let = 123;
s === number.prototype.tostring // true
let = true;
s === boolean.prototype.tostring // true
五、函式引數的解構賦值
function add([x,y])
add([1,2]); // 3
[[1,2],[3,4]].map(([a,b]) => a+b); // [3,7];
函式引數的解構也可以使用,預設值
function move( = {})
move(); // [3,8];
move(); // [3,0];
move({});//[0,0]
move();//[0,0]
undefined會觸發函式的預設值
[1,undefined,3].map((x = "yes")=>x) // [1,"yes",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解構賦值
coding changes the world accumulating makes yourself 主要從三個方面講述 陣列式的解構賦值 物件式的解構賦值 函式中的解構賦值 preface 現今的變數宣告語法十分的直接 左邊是乙個變數名,右邊可以是乙個陣列 的表示式或乙個物件 的表示式,等等。...