let關鍵字
- 特性:
- 塊級作用域
- 變量聲明不提升
- 暫時性死區
- 不能重複聲明
const關鍵字
- 特性:
- 塊級作用域
- 變量聲明不提升
- 暫時性死區
- 不能重複聲明
- 在聲明時初始化
- 不可更改值
解構 – 模式匹配
ES6 允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱爲解構(Destructuring)。
解構成功
-
完全解構
let [a, b, c] = [1, 2, 3];
-
不完全解構
let [a, b] = [1, 2, 3];
-
解構不成功,變量的值就等於undefined
let [a, b, c] = [1, 2];
先去判斷解構的值有無,若有,進行賦值,若無,進行默認值賦值
擴展運算符…
- 擴展運算符可以將數據展開
- 不能單獨使用擴展運算符展開數組,可以在參數中使用,將參數數組轉成參數列表。
- 如果擴展運算符後面跟的是變量,那麼接受單獨多餘的數組放置到數組中。
let [a,b,c,...d] = [1,2,3,4,5,6,7];
let result = Math.max(...[1,2,3,4,5,6,7]);
console.log(...[1,2,3]);
- rest參數----將不再推薦使用arguments
function test(...tail){}
test(1,2,3);
對象的解構
- 對象的屬性沒有次序,變量必須與屬性同名
- 使用:對屬性進行重命名
let {name:myName,age:myAge,address:myAddress="江蘇"} = {
name:'tom',
gender:'男',
age:18
}
console.log(myName,myAge,myAddress);
字符串的解構
let [a, b, c, d, e] = 'hello'; //a=h;b=e;c=l;d=l;e=o
let {length : len} = 'hello'; //len = 5
數值和布爾值的解構
let {toString:s} = 123;
console.log(s===Number.prototype.toString);//true
let {toString} = true;
console.log(toString===Boolean.prototype.toString);//true
函數參數的解構賦值
function test([a=0,b=0]){}
test([1,2])
常見用途
- 交換變量的值:
let x=1;
let y=2;
[x,y] = [y,x];
- 函數參數的定義
function f([x, y, z]) { ... }
f([1, 2, 3]);
- 從函數中返回多個值
function test(){
return [1,2,3];
}
let [a,b,c] = test();