JavaScript 中 如何判斷一個物件是空物件
阿新 • • 發佈:2022-03-16
- 利用 for...in 判斷
function isEmptyObject(object) {
for (let key in object) {
return false; // 能遍歷,物件不為空
}
return true;
}
思路:利用for in 迴圈遍歷物件和物件原型上的可列舉屬性;
缺點:只能遍歷可列舉屬性,若一個物件上只有不可列舉屬性的話,會判斷錯誤;
- 利用 Object.keys() 判斷
function isEmptyObject(object) {
return Object.keys(object).length === 0;
}
思路:Object.keys
缺點:如 for...in 判斷一樣,Object.keys 方法也只返回可列舉屬性;
- 將物件轉化為json字串
function isEmptyObject(object) {
return JSON.stringify(object) === "{}";
}
- 利用 Object.getOwnPropertyNames() 判斷
function isEmptyObject(object) { return Object.getOwnPropertyNames(object).length === 0; }
思路: Object.getOwnPropertyNames 方法獲取到物件中的屬性名,存到一個數組中,返回陣列物件,若陣列長度為0,則是空物件;
缺點: Object.getOwnPropertyNames 方法是 Object.keys 的改進,可獲取到不可列舉屬性,但該方法無法獲取 Symbol 屬性;
- 利用 Reflect.ownKeys() 判斷
function isEmptyObject(object) {
return Reflect.ownKeys(object).length === 0;
}
思路: Reflect.ownKeys 也可以返回物件自身屬性名所構成的陣列,該方法可以返回不可列舉屬性以及 Symbol
[延伸知識點]
什麼是可列舉屬性,什麼是不可列舉屬性:
可列舉屬性是指內部可列舉標誌 (enumerable) 設定為 true 的屬性,不可列舉屬性即是 enumerable 為 false;
js遍歷物件方法區別總結:
方法 | 基本屬性 | 原型鏈屬性 | 不可列舉屬性 | symbol屬性 |
---|---|---|---|---|
for...in | √ | √ | × | × |
Object.keys() | √ | × | × | × |
Object.getOwnPropertyNames() | √ | × | √ | × |
Object.Object.getOwnPropertySymbols()() | × | × | √ | √ |
Reflect.ownKeys() | √ | × | √ | √ |