1、es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構(destructuring)。
2、es6允許寫成:let [a,b,c] = [1,2,3];上面**表示,可以從陣列中提取值,按照對應位置,對變數賦值。本質上,這種寫法屬於「模式匹配」,只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值。
3、如果解構不成功,變數的值就等於undefined
。
let [bar, foo] = [1];
foo的值將是undefined。
4、只要某種資料結構具有 iterator 介面,都可以採用陣列形式的解構賦值。
5、解構賦值允許指定預設值。
let [x, y = 'b'] = ['a']; //x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; //
x='a', y='b'
注意,es6 內部使用嚴格相等運算子(===
),判斷乙個位置是否有值。所以,如果乙個陣列成員不嚴格等於undefined
,預設值是不會生效的。如果乙個陣列成員是null
,預設值就不會生效,因為null
不嚴格等於undefined
。
6、解構不僅可以用於陣列,還可以用於物件。物件的解構與陣列有乙個重要的不同。陣列的元素是按次序排列的,變數的取值由它的位置決定;而物件的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。
7、如果變數名與屬性名不一致,必須寫成下面這樣。
var = ;baz
//"aaa"
let obj = ;
let =obj;
f //
'hello'
l //
'world'
這實際上說明,物件的解構賦值是下面形式的簡寫
let = ;
也就是說,物件的解構賦值的內部機制,是先找到同名屬性,然後再賦給對應的變數。真正被賦值的是後者,而不是前者。
8、物件的解構賦值,可以很方便地將現有物件的方法,賦值到某個變數。
let = math;
上面**將math
物件的對數、正弦、余弦三個方法,賦值到對應的變數上,使用起來就會方便很多。
9、字串也可以解構賦值。這是因為此時,字串被轉換成了乙個類似陣列的物件。類似陣列的物件都有乙個length
屬性,因此還可以對這個屬性解構賦值。
let = 'hello';len
//5
10、解構賦值的規則是,只要等號右邊的值不是物件,就先將其轉為物件。由於undefined
和null
無法轉為物件,所以對它們進行解構賦值,都會報錯。
11、以下三種解構賦值不得使用圓括號。
變數宣告語句中,不能帶有圓括號。
函式引數中,模式不能帶有圓括號。
賦值語句中,不能將整個模式,或巢狀模式中的一層,放在圓括號之中。
12、可以使用圓括號的情況只有一種:賦值語句的非模式部分,可以使用圓括號。
13、變數解構賦值的用途:
交換變數的值。[x,y]=[y,x];從函式返回多個值。函式只能返回乙個值,如果要返回多個值,只能將它們放在陣列或物件裡返回。有了解構賦值,取出這些值就非常方便。
函式引數的定義。解構賦值可以方便地將一組引數與變數名對應起來。提取json資料
函式引數的預設值
遍歷map結構
輸入模組的指定方法
js ES6解構賦值
交換變數的值 let x 1 let y 2 x,y y,x console.log x,y 1用乙個中間變數 let z x x y y z console.log x,y 2異或 x x y y x y x x y console.log x,y 3.算術運算子 x x y y x y x x ...
js ES6學習筆記 Proxy
1 proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種 元程式設計 meta programming 即對程式語言進行程式設計。2 proxy 可以理解成,在目標物件之前架設一層 攔截 外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾...
js ES6學習筆記 Reflect
1 reflect物件與proxy物件一樣,也是 es6 為了操作物件而提供的新 api。reflect物件的設計目的有這樣幾個。2 reflect.get方法查詢並返回target物件的name屬性,如果沒有該屬性,則返回undefined。3 reflect.set方法設定target物件的na...