一: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除了新增let
和const
命令,還有另外兩種宣告變數的方法: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:函式引數解構賦值:可以用陣列作為函式引數,在呼叫函式的時候傳陣列就可以按順序賦值。
functionadd([x, y])
add([1, 2]);
5:解構賦值的應用場景
1)交換兩個變數值:
[x, y] = [y, x];
2)從函式返回多個值,按順序解構賦值給左側變數:
functionexample() ;
}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...