ES6 destructuring 參數
Destructuring (解構賦值)是es6中很常用的語法 用處是不用點(.)來點(.)去,直接把Object中的值化為實際變量來使用
簡單的例子
var somdata = {
id: "1",
user_name: "Nandi"
};
// 舊式寫法
var user\_name = data.user\_name;
var id = data.id;
updateUsername(id, user_name);
...
// 利用 destructuring
const {
id,
user_name
} = data;
updateUsername(id, user_name);
有時侯function中的參數也會用到destructuring
// without destructuring
function someFunc(data) {
const param1 = data.param1;
const param2 = data.param2;
const param3 = data.param3;
......
}
// with destructuring
function someFunc({
param1,
param2,
param3
}) {
......
}
這個寫法有一個好處 因為原本的寫法在method的參數當中你只知道傳進了data但卻沒有說明data的格式為何
利用Destructuring則可以把data的格式更清楚地列明,有效減少代碼的錯誤,亦提高了代碼的可讀性 但當destructring 配合default parameters來使用時就需要小心了
function printParam({
param1 = "default_value1",
param2 = "default_value2"
}) {
console.log(param1);
console.log(param2);
}
// 傳空的object進去沒問題
printParam({})
> default_value1
> default_value2
// 傳其中一個參數也沒問題
printParam({ param1: 'somedata' })
> somedata
> default_value2
// 這樣就出問題了
printParam();
> TypeError: Cannot destructure property `varA` of 'undefined' or 'null'.
原因是printParam中的default param是建基於你傳進去的object,而並不是之外的param 所以這樣寫的時侯需要加倍小心
正確的寫法應該是這樣
// 正確寫法
function printParam({
param1 = "default_value1",
param2 = "default_value2"
} = {} ) {
console.log(param1);
console.log(param2);
}
> default_value1
> default_value2
這樣寫就會把本身要傳進去的object參數也建立一個預設值,當你什麼都沒傳進去時就會生成一個空的object 然後再把本身object中的參數按預設值再生成