Как проверить, что объект пуст

JavaScript

20190401232110.png

⭐️ Чтобы узнать больше о передовых технологиях и знаниях, найдите номера подписки.JS 菌подписка

Легко проверить, что массив пуст, просто вызовите метод длины напрямую, как потом проверить, пуст ли объект ❓

Пусто здесь означает, что объект не имеет собственных свойств.

Предположим, здесь есть два объекта, один — obj, а другой — AnotherObj.

let obj1 = {
    name: 'oli',
    child: {
        name: 'oliver'
    }
}

let obj2 = {
    [Symbol('name')]: 'alice'
}

let obj3 = Object.defineProperty({}, 'name', {
    value: 'alice',
    enumerable: false
})

let obj4 = Object.create(null)

// 我们需要一个函数,判断是否不含自有属性

isEmpty(obj1) // false
isEmpty(obj2) // false
isEmpty(obj3) // false
isEmpty(obj4) // true

❗️ После долгих размышлений, чтобы проверить, есть ли у объекта свойство Symbol, можно использовать только метод getOwnPropertySymbols, если есть метод лучше, оставьте сообщение

Способ 1: Траверс

for-in обход и подтверждает, существует ли ключ с помощью метода hasOwnProperty.Этот метод не может перейти к свойствам, чье перечисление имеет значение false

const isEmptyObj = object => {
    if (!!Object.getOwnPropertySymbols(object).length) {
        return false
    }
    for (const key in object) {
        if (object.hasOwnProperty(key)) {
            return false
        }
    }
    return true
}

Способ 2: метод ключей

Используйте ключи статического метода Object, а затем оцените длину.Keys возвращает свои собственные перечисляемые свойства, поэтому то же самое нельзя пройти к свойствам, чье перечисление имеет значение false.

const isEmptyObj = object => {
    if (!!Object.getOwnPropertySymbols(object).length) {
        return false
    }
    if (Object.keys(object).length) {
        return false
    }
    return true
}

Способ 3: метод JSON

JSON Stringify Способ с использованием объекта в строку, а Сравнение строки «{}», тот же метод не может быть получен не проводным свойствам

const isEmptyObj = object => {
    if (!!Object.getOwnPropertySymbols(object).length) {
        return false
    }
    return JSON.stringify(object) === '{}'
}

Метод 4: метод getOwnPropertyNames

Используйте метод getOwnPropertyNames объекта Object, чтобы получить все имена свойств, чтобы можно было получить даже неперечислимые свойства, что является приемлемым методом.

const isEmptyObj = object => {
    if (!!Object.getOwnPropertySymbols(object).length) {
        return false
    }
    if (!!Object.getOwnPropertyNames(object).length) {
        return false
    }
    return true
}

20190401230821.png

Упрощенная версия:

const isEmptyObj = object => !Object.getOwnPropertySymbols(object).length && !Object.getOwnPropertyNames(object).length

JS 菌公众账号

Если есть лучший способ, пожалуйста, оставьте сообщение

Пожалуйста, обратите внимание на мой номер подписки, время от времени я буду выкладывать технические статьи о JS, только говорить о технологиях, а не сплетничать 😊

EOF