- ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)
var arr = [1, 3, 5];
//會(huì)依次將數(shù)組中的內(nèi)容賦值給等號(hào)左邊[]中的變量
let [a, b, c] = arr;
//a = 1,b = 3,c = 5
- 解構(gòu)不成功,變量的值為undefined
var arr = [1, 3, 5];
let [a,b,c,d] = arr;
// d = undefined
- 如果變量右邊不是數(shù)組和對(duì)象(不具備Iterator接口) 會(huì)報(bào)錯(cuò)
解構(gòu)的默認(rèn)值
- 解構(gòu)時(shí)可以給變量指定默認(rèn)值
- ES6 內(nèi)部使用嚴(yán)格相等運(yùn)算符(===),判斷一個(gè)位置是否有值。所以,只有當(dāng)一個(gè)數(shù)組成員嚴(yán)格等于undefined,默認(rèn)值才會(huì)生效。
- 默認(rèn)值可以是其他變量, 但必須其他變量已經(jīng)定義
let [foo = true] = [];
foo // true
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
解構(gòu)對(duì)象
- 變量名與屬性一樣的解構(gòu), 會(huì)將對(duì)象中和屬性名稱和解構(gòu)中變量名稱一致的賦值給解構(gòu)的變量
let obj = {
name: "xxz",
age: 13
};
let {name, age} = obj;
name //"xxz"
age //13
- 變量名與屬性不一樣的解構(gòu), 必須寫成如下格式
let obj = {
name: "xxz",
age: 13
};
let {name : name2, age3 : age} = obj;
name2 //"xxz"
age3 //13
- 和數(shù)組解構(gòu)類似, 也可以指定默認(rèn)值
- 數(shù)值和bool值解構(gòu)會(huì)先轉(zhuǎn)換成對(duì)象
let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s} = true;
s === Boolean.prototype.toString // true
解構(gòu)作為函數(shù)參數(shù)
let obj = {
name: "lnj",
age: 13
};
// 大大的提升了開發(fā)效率, 簡(jiǎn)化了代碼
function say({name, age}) {
console.log(name, age);
}
say(obj);
函數(shù)的默認(rèn)值
- 應(yīng)用場(chǎng)景:
- 某一個(gè)函數(shù)的某些參數(shù)永遠(yuǎn)都是一些固定的值,
- 獲取用于都是通過(guò)其它函數(shù)獲得的, 那么就可以使用默認(rèn)參數(shù)
function Car(id) {
this.id = id;
}
function createCar(id = getRandom()) {
return new Car(id);
}
function getRandom() {
return Math.random() * 10000;
}
// var c1 = createCar(getRandom());
var c1 = createCar();
console.log(c1);