js ES6學習筆記 變數的解構賦值

2021-09-07 09:14:56 字數 1962 閱讀 7261

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、解構賦值的規則是,只要等號右邊的值不是物件,就先將其轉為物件。由於undefinednull無法轉為物件,所以對它們進行解構賦值,都會報錯。

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...