Pertanyaan Bagaimana cara menguji objek JavaScript kosong?


Setelah permintaan AJAX, terkadang aplikasi saya dapat mengembalikan objek kosong, seperti:

var a = {};

Bagaimana saya bisa memeriksa apakah itu yang terjadi?


1867
2018-03-25 01:39


asal


Jawaban:


ECMA 5+:

// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object

Pra-ECMA 5:

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return JSON.stringify(obj) === JSON.stringify({});
}

jQuery:

jQuery.isEmptyObject({}); // true

lodash:

_.isEmpty({}); // true

Menggarisbawahi:

_.isEmpty({}); // true

Hoek

Hoek.deepEqual({}, {}); // true

ExtJS

Ext.Object.isEmpty({}); // true

AngularJS (versi 1)

angular.equals({}, {}); // true

Ramda

R.isEmpty({}); // true

3067
2018-03-25 01:49



Tidak ada cara mudah untuk melakukan ini. Anda harus mengulang properti secara eksplisit:

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}

Jika Dukungan ECMAScript 5 tersedia, Anda dapat menggunakan Object.keys() sebagai gantinya:

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}

747
2018-05-19 14:07



Bagi Anda yang memiliki masalah yang sama tetapi menggunakan jQuery, Anda dapat menggunakan jQuery.isEmptyObject.


539
2018-03-22 20:35



Kamu dapat memakai Underscore.js.

_.isEmpty({}); // true

184
2017-07-12 07:46



Ini adalah solusi pilihan saya:

var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty

181
2017-11-06 13:48



if(Object.getOwnPropertyNames(obj).length === 0){
  //is empty
}

Lihat http://bencollier.net/2011/04/javascript-is-an-object-empty/ 


103
2018-01-23 20:07



Bagaimana kalau menggunakan JSON.stringify? Ini hampir tersedia di semua browser modern.

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

62
2018-01-31 10:55