JavaScript 中判断 {}是空对象
Javascript 中判断空对象
简介:在 JavaScript 判断字符串是否是一个空字符串 可以 !"" 返回 true 来判断, 要是判断 {} 是否是空对象,也用 !{} 来判断的 得到的结果是 false, !{name: ''} 的返回结果也是 false。那么这肯定是无法判断了。那么在JavaScript 中与没有其他方法可以来判断呢?让我们看看下面的方法。
- 首先我们先定义两个对象,一个没有属性,一个存在属性
var obj = {}
var obj2 = {name: '123'}
方法一 JSON.stringify()
function isEmptyObject(obj) {
return JSON.stringify(obj) === '{}'
}
console.log(isEmptyObject(obj)) // true
console.log(isEmptyObject(obj2)) // false
方法二 Object.getOwnPropertyNames()
- getOwnPropertyNames() 方法会获取对象中的属性名,存到一个数组中返回。
- 我们可以通过判断数组长度是否为 0 来判断
function isEmptyObject(obj) {
return Object.getOwnPropertyNames(obj).length === 0
}
console.log(isEmptyObject(obj)) // true
console.log(isEmptyObject(obj2)) // false
方法三 Object.keys()
- keys() 方法是ES6 中新增方法,作用和 getOwnPropertyNames() 形同。也会返回一个存储属性名的一个数组
function isEmptyObject(obj) {
return Object.keys(obj).length === 0
}
console.log(isEmptyObject(obj)) // true
console.log(isEmptyObject(obj2)) // false
方法四 forin
- 通过forin 方法判断是否存在 属性,存在放回 false 不存在 返回true
function isEmptyObject(obj) {
for (var key in obj) {
return false;
}
return true;
}
console.log(isEmptyObject(obj)) // true
console.log(isEmptyObject(obj2)) // false
方法五 Reflect.ownKeys()
- Reflect.ownKeys() 也是返回一个数组,可以 解决 Symbol() 作为 key 时的尴尬
var symbal = Symbal();
var bb = {};
bb[symbal] = 'Symbal';
function isEmptyObject(obj) {
return Reflect.ownKeys(obj).lenght === 0;
}
console.log(isEmptyObject(obj)) // true
console.log(isEmptyObject(obj2)) // false
console.log(isEmptyObject(bb)) // false Reflect.ownKeys(bb) 返回 [Symbol()]