1.1.陣列形式的解構賦值
let
[foo,
[[bar]
, baz]]=
[1,[
[2],
3]];
// foo = 1、bar = 2、baz = 3
let[
,, third]=[
"foo"
,"bar"
,"baz"];
// third = "baz"
只要某種資料結構具有 iterator 介面,都可以採用陣列形式的解構賦值
2.1.指定預設值。
let
[x, y =
'b']=[
'a']
;// x='a', y='b'
let[x, y =
'b']=[
null
, undefined]
;// x=null, y='b'
es6 內部使用嚴格相等運算子(===)判斷乙個位置是否有值。所以,只有當乙個陣列成員嚴格等於undefined,預設值才會生效。
3.1.如果預設值是乙個表示式,那麼這個表示式是惰性求值的,即只有在用到的時候,才會求值。
functionf(
)let
[x =f(
)]=[
1];
上面**中,因為x能取到值,所以函式f根本不會執行。
2.1.物件的解構賦值
物件的解構與陣列有乙個重要的不同。陣列的元素是按次序排列的,變數的取值由它的位置決定;而物件的屬性沒有次序,變數必須與屬性同名,才能取到正確的值
let=;
>>b // "aaa"
>>f // error: f is not defined
f是匹配的"模式",b才是變數。真正被賦值的是變數,而不是"模式"。物件的解構賦值的內部機制,是先找到同名屬性,然後再賦給對應的變數。真正被賦值的是後者,而不是前者。
let
, loc:}}
=}}>>loc //
>>start //
>>line // 1
"loc,"代表:「loc:loc」
2.2.設定預設值
注釋:物件的解構也可以指定預設值,預設值生效的條件是,物件的屬性值嚴格等於undefined。如果解構失敗,變數的值等於undefined。,
var=;
>>x // 3
3.1.函式的引數也可以使用解構賦值function
add(
[x, y =
8, z]
)add([
1,2,
3]);
// 6
add([1
,,1]
);// 10
函式add的引數表面上是乙個陣列,但在傳入引數的那一刻,陣列引數就被解構成變數x和y。對於函式內部的**來說,它們能感受到的引數就是x和y。
上述引數【「y = 8」】為設定函式引數預設值
*3.2.引數指定預設值
function
move(=
)move()
;// [3, 8]
move()
;// [3, undefined]
move()
;// [undefined, undefined]
move()
;// [0, 0]
注意與3.1示例區分,上述**為函式move的引數指定預設值,而不是為變數x和y指定預設值。undefined就會觸發函式引數的預設值。
在呼叫該函式時,用入參來替換【引數括號中的"=「號的後半部分,即示例的:後半部分為」"】。
4.1.利用物件的解構賦值可以快速賦值
let
= math;
// 上面**將math物件的對數、正弦、余弦三個方法,賦值到對應的變數上。
4.2.由於陣列本質是特殊的物件,因此可以對陣列進行物件屬性的解構。此時,陣列的下標相當於物件的屬性名。
4.3.字串也可以解構賦值,因為字串預設具有 iterator 介面。這是因為此時,字串被轉換成了乙個類似陣列的物件。
4.4.將解構賦值用來提取 json 資料,尤其有用。
let jsondata =
;let
= jsondata;
console.
log(id, status, number)
;// 42, "ok", [867, 5309]
博文不長,旨在精煉,僅個人複習理解使用… Javascript 解構賦值
本文是ecmascript 6 入門學習筆記 es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 destructuring 等號的右邊不是陣列必須為可遍歷的結構 具備 iterator 介面 解構賦值為陣列中提取值,按照對應位置,對變數賦值。let x,y 1,2,3 x...
變數的解構賦值
從陣列和物件中提取值,對變數進行賦值,這被稱為解構 本質上,這種寫法屬於 模式匹配 只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值 例子 let a,b,c 1,2,3 let foo,bar baz 1,2 3 foo 1 bar 2 baz 3 let third foo bar baz ...
變數的解構賦值
什麼是解構 es6允許按照一定的模式,從陣列或者物件中提取值,然後賦值給相應變數,此為解構。解構分為完全解構和不完全解構,前者要求一一對應,後者可以是等號左邊只匹配等號右邊的一部分。解構不成功會返回undefined。let foo alert foo undefined重點 不是只有陣列才可以解構...