1. 程式人生 > 其它 >JavaScript 中 如何判斷一個物件是空物件

JavaScript 中 如何判斷一個物件是空物件

  1. 利用 for...in 判斷
function isEmptyObject(object) {
	for (let key in object) {
		return false;	// 能遍歷,物件不為空
	}
	return true;
}

思路:利用for in 迴圈遍歷物件和物件原型上的可列舉屬性;
缺點:只能遍歷可列舉屬性,若一個物件上只有不可列舉屬性的話,會判斷錯誤;

  1. 利用 Object.keys() 判斷
function isEmptyObject(object) {
	return Object.keys(object).length === 0;
}

思路:Object.keys

能返回物件自身上所有可列舉屬性的名稱所構成的陣列,若陣列長度為0,那就是一個空物件;
缺點:for...in 判斷一樣,Object.keys 方法也只返回可列舉屬性;

  1. 將物件轉化為json字串
function isEmptyObject(object) {
	return JSON.stringify(object) === "{}";
}
  1. 利用 Object.getOwnPropertyNames() 判斷
function isEmptyObject(object) {
	return Object.getOwnPropertyNames(object).length === 0;
}

思路: Object.getOwnPropertyNames 方法獲取到物件中的屬性名,存到一個數組中,返回陣列物件,若陣列長度為0,則是空物件;
缺點: Object.getOwnPropertyNames 方法是 Object.keys 的改進,可獲取到不可列舉屬性,但該方法無法獲取 Symbol 屬性;

  1. 利用 Reflect.ownKeys() 判斷
function isEmptyObject(object) {
	return Reflect.ownKeys(object).length === 0;
}

思路: Reflect.ownKeys 也可以返回物件自身屬性名所構成的陣列,該方法可以返回不可列舉屬性以及 Symbol

屬性;


[延伸知識點]
什麼是可列舉屬性,什麼是不可列舉屬性:
可列舉屬性是指內部可列舉標誌 (enumerable) 設定為 true 的屬性,不可列舉屬性即是 enumerablefalse;


js遍歷物件方法區別總結:

方法 基本屬性 原型鏈屬性 不可列舉屬性 symbol屬性
for...in × ×
Object.keys() × × ×
Object.getOwnPropertyNames() × ×
Object.Object.getOwnPropertySymbols()() × ×
Reflect.ownKeys() ×