ES6學習筆記一 let const 解構賦值

2021-09-07 13:21:05 字數 3244 閱讀 1819

一:let與const命令

1:let命令

es6新增了let命令,用來宣告變數。它的用法類似於var,但是所宣告的變數,只在let命令所在的**塊內有效。——let命令彌補了es語法一切皆公開的弊端,起到了區域性變數的功能,增加了塊級作用域。

for迴圈的計數器,就很合適使用let命令來宣告,它只在for迴圈體內有效。

let不像var那樣會發生「變數提公升」(宣告語句可以寫在後面,在執行時會重排列,把宣告語句先解釋)。所以,變數一定要在宣告後使用,否則報錯。

暫時性死區:在**塊內,若有let、const宣告的變數,則在該**塊中,遇到該變數的宣告語句前使用該變數都會報錯。並且,塊內變數覆蓋塊外全域性同名變數。那麼,從**塊開始~變數宣告語句前,這片區域就叫做暫時性死區。暫時性死區的本質就是,只要一進入當前作用域,所要使用的變數就已經存在了,但是不可獲取,只有等到宣告變數的那一行**出現,才可以獲取和使用該變數。

if (true

)

不允許重複宣告

在let命令存在的**中,不允許有同名的變數宣告語句出現,會報錯;也不允許在函式內部宣告與引數同名的變數;

//

報錯function

() //

報錯function

() function

func(arg)

2:const命令

const宣告乙個唯讀的常量。一旦宣告,常量的值就不能改變。

對於const來說,只宣告不賦值,就會報錯。

const的作用域與let命令相同:只在宣告所在的塊級作用域內有效。

const命令宣告的常量也是不提公升,同樣存在暫時性死區,只能在宣告的位置後面使用。

const宣告的常量,也與let一樣不可重複宣告。

es5只有兩種宣告變數的方法:var命令和function命令。es6除了新增letconst命令,還有另外兩種宣告變數的方法:import命令和class命令。所以,es6一共有6種宣告變數的方法

二:變數的解構賦值

es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構(destructuring)。

本質上,這種寫法屬於「模式匹配」,只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值

1:陣列解構

let [a, b, c] = [1, 2, 3];//

陣列解構賦值

let [ , , third] = ["foo", "bar", "baz"];

另一種情況是不完全解構,即等號左邊的模式,只匹配一部分的等號右邊的陣列。這種情況下,解構依然可以成功。

let [x, y] = [1, 2, 3];

如果等號的右邊不是可遍歷的結構,那麼將會報錯。

//

報錯let [foo] = 1;

let [foo] = false

;let [foo] =nan;

let [foo] =undefined;

let [foo] = null

;let [foo] = {};

只要右邊的具有可迭代介面,就可以用來解構賦值

可以指定預設值,在右側沒有對應位置的值時作為左側變數的值:

let [x, y = 'b'] = ['a']; //

x='a', y='b'

2:物件解構賦值:左側:用{}括起物件,花括號內用逗號分隔符宣告一系列屬性。

右側:用{}括起來表示物件,用鍵值對的形式為物件的屬性們進行賦值,注意:右側賦值的屬性必須在左側宣告過

let  = ;

對於複雜的資料,可以在需要賦值的屬性前加乙個模式標誌,在右側賦值的時候也用模式來定位:

let obj =

]};let ] } = obj;

3:字串解構賦值

const [a, b, c, d, e] = 'hello';

4:函式引數解構賦值:可以用陣列作為函式引數,在呼叫函式的時候傳陣列就可以按順序賦值。

function

add([x, y])

add([1, 2]);

5:解構賦值的應用場景

1)交換兩個變數值:

[x, y] = [y, x];

2)從函式返回多個值,按順序解構賦值給左側變數:

function

example() ;

}let = example();

3)呼叫函式時,解構賦值給函式引數:

//

引數是一組有次序的值

function

f([x, y, z])

f([1, 2, 3]);

//引數是一組無次序的值

function

f()

f();

4)提取json資料,解構賦值給左側變數:

let jsondata =;

let = jsondata;

5)遍歷map,解構獲取每對鍵和值

//

獲取鍵值對

for(let [key, value] of map)

//獲取鍵

for(let [key] of map)

//獲取值

for(let [,value] of map)

6)載入模組時,指定輸入哪些方法:

const  = require("source-map");

ES6中對let cons的解釋

比如 var one 10 if true console.log one 10 因為再上面使用let定義的one只在上面那個 塊中有效,不影響外面的這裡說的 塊就是乙個 包起來的範圍就是乙個 塊 如 const two 20 two 10 報錯,這樣就等於改變了它原來指向的位址了 const ar...

es6學習筆記(一)

最近在看阮一峰的 es6標準入門 打算在每天早起上班前看一小時,然後寫個部落格總結 關於第二章let,const命令的總結 1 暫時性死區 只要進入當前作用域,所要使用的變數就已經存在,但是,不可獲取,只有等到宣告變數的那一行 出現,才可以獲取和使用該變數 2 函式宣告語句和函式表示式的區別 函式宣...

es6學習筆記(一)

一.let和const let用於定義變數,const用於定義常量,都是塊級作用域。二.陣列的解構賦值 解構陣列 例 var a 1,b 2,c 3 var a,b,c 1,2,3 省略號的使用 var a,c 1,2,3 console.log a a console.log c c a 1c 2...