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()]
posted @ 2021-12-15 17:36  影的记忆  阅读(248)  评论(0编辑  收藏  举报