待解構欄位為原始值正常情況下, const obj = {
a: 1,
b: 2,
};
const { a, b } = obj;
console.log(a, b); // 1 2
當被解構欄位缺失時, const obj = {
a: 1,
};
const { a, b } = obj;
console.log(a, b); // 1 undefined
此時可在解構時使用 const obj = {
a: 1,
};
const { a, b = 2 } = obj;
console.log(a, b); // 1 2
解構時指定別名你甚至可以在解構欄位的同時為其重新命名, const obj = {
a: 1,
b: undefined
}
const { a, b: c = 2 } = obj;
console.log(a, c) // 1 2
上述過程其實為:
上面的過程等同於: const c = obj.b || 2
待解構欄位為物件考察如下的物件: const obj = {
innerObj: {
a: 1,
b: 2
}
}
正常情況下可通過如下的形式解構以得到內層的欄位: const obj = {
innerObj: {
a: 1,
b: 2,
},
};
const {
innerObj: { a, b = 2 },
} = obj;
console.log(a, b); // 1 2
但如果裡面巢狀的物件缺失時,上面的解構會報錯: const obj = {};
const {
innerObj: { a, b = 2 },
} = obj;
console.log(a, b); // ? error: Uncaught TypeError: Cannot read property 'a' of undefined
此時需要在解構時對內層物件也指定預設值,形式如下: const obj = {};
const {
innerObj: { a, b = 2 } = {},
} = obj;
console.log(a, b); // undefined 2
解構欄位包含在多層巢狀內當被解構欄位包含在多層巢狀內時,甚至可以通過上面的方式為每一層都指定預設值: const obj = {}
const { foo: { bar: { a, b = 2 } = {} } = {} } = obj;
console.log(a, b) // undefined 2
物件解構時需要注意,當其為 const obj = {
foo: {
bar: null
}
}
const { foo: { bar: { a, b = 2 } = {} } = {} } = obj;
console.log(a, b) // ? error: Uncaught TypeError: Cannot destructure property 'a' of '{}' as it is null.
|
The text was updated successfully, but these errors were encountered: |
JavaScript 中物件解構時指定預設值
相關文章
- JavaScript 物件解構賦值JavaScript物件賦值
- Javascript 解構賦值,將屬性/值從物件/陣列中取出,賦值給其他變數JavaScript賦值物件陣列變數
- MYSQL中給時間列設定預設值MySql
- JavaScript 字串解構賦值JavaScript字串賦值
- JavaScript陣列解構賦值JavaScript陣列賦值
- JavaScript解構賦值的用途JavaScript賦值
- JavaScript中 Map 物件詳解JavaScript物件
- javascript給函式引數設定預設值JavaScript函式
- ES6小技巧 - 使用解構賦值設定函式引數預設值賦值函式
- JavaScript 函式引數解構物件JavaScript函式物件
- 深入解讀 JavaScript 中的物件導向程式設計JavaScript物件程式設計
- 深入瞭解JavaScript中的物件JavaScript物件
- 詳解Javascript中的Object物件JavaScriptObject物件
- javascript如何判斷物件直接量中是否含有指定屬性JavaScript物件
- JavaScript函式引數解構賦值JavaScript函式賦值
- 瞭解 JavaScript 中的內建物件JavaScript物件
- MySQL欄位預設值設定詳解MySql
- JavaScript獲取table表格指定列的值JavaScript
- ${VAR:=預設值}和${VAR:-預設值} 區別
- 面試題:一道關於解構賦值和引數預設值的程式設計題面試題賦值程式設計
- Javascript 物件導向中的建構函式和原型物件JavaScript物件函式原型
- php7中為物件/關聯陣列進行解構賦值PHP物件陣列賦值
- [譯]JavaScript ES6解構賦值指南JavaScript賦值
- 為 protocol 中屬性新增預設值Protocol
- Python中的預設引數值Python
- Oracle中NLS_LANG的預設值Oracle
- Navicat for MySQL 15使用教程:何時使用預設值以及如何選用恰當的預設值MySql
- Python中如何給字典設定預設值Python
- JavaScript 中的物件導向程式設計JavaScript物件程式設計
- 深度解讀《深度探索C++物件模型》之預設建構函式C++物件模型函式
- MySQL設定當前時間為預設值的方法MySql
- JavaScript 解構賦值小括號的應用JavaScript賦值
- Recoil 中預設值的正確處理
- JavaScript建構函式,物件導向程式設計JavaScript函式物件程式設計
- Entity Framework的預設值BUG解決方法Framework
- JavaScript 之物件拷貝與賦值JavaScript物件賦值
- Sqlserver的欄位datetime型別預設值設為getdate()時,設值毫秒為000SQLServer型別
- JavaScript 遊戲中的物件導向的設計JavaScript遊戲物件