Kaip patikrinti tuščią „JavaScript“ objektą?

Po AJAX užklausos kartais mano programa gali grąžinti tuščią objektą, pavyzdžiui:

 var a = {}; 

Kaip galiu patikrinti, ar taip yra?

2131
25 марта '09 в 4:39 2009-03-25 04:39 falmp yra nustatytas kovo 25 d ., 09:39, 2009-03-25 04:39
@ 46 atsakymai
  • 1
  • 2

ECMA 7+ :

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

ECMA 5+ :

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

Pre-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 

Lodashas :

 _.isEmpty({}); // true 

Pabraukti :

 _.isEmpty({}); // true 
border=0

Kablys

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

Extjs

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

AngularJS (1 versija)

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

Ramda

 R.isEmpty({}); // true 
3573
20 авг. Adomo Zernerio atsakymas 20 rug . 2015-08-20 04:32 '15 ne 4:32 2015-08-20 04:32

Nėra paprasto būdo tai padaryti. Turėsite aiškiai pakeisti ypatybes:

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

Jei ECMAScript 5 palaikymas yra prieinamas , galite naudoti Object.keys() :

 function isEmpty(obj) { return Object.keys(obj).length === 0; } 
772
25 марта '09 в 4:49 2009-03-25 04:49 Christofo atsakymas, pateiktas kovo 25 d., 09:49, 2009-03-25 04:49

Tiems iš jūsų, kurie turi tą pačią problemą, bet naudojate jQuery, galite naudoti jQuery.isEmptyObject .

546
19 мая '10 в 17:07 2010-05-19 17:07 atsakė Erik Töyrä gegužės 19, 10 d. 17:07

Tai mano pageidaujamas sprendimas:

 var obj = {}; return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty 
209
12 июля '14 в 10:46 2014-07-12 10:46 atsakymas pateikiamas dhruvio liepos 12, 14, 10:46 2014-07-12 10:46

Galite naudoti „ Underscore.js“ .

 _.isEmpty({}); // true 
191
22 марта '11 в 23:35 2011-03-22 23:35 atsakymą pateikė „ Baggz “ kovo 22 d. 11 val. 11.35. 2011-03-22 23:35
 if(Object.getOwnPropertyNames(obj).length === 0){ //is empty } 

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

107
06 нояб. atsakymas pateikiamas Kelnas 06 lapkričio. 2013-11-06 16:48 '13, 16:48, 2013-11-06 16:48

Kaip apie JSON.stringify naudojimą? Jis prieinamas beveik visose šiuolaikinėse naršyklėse.

 function isEmptyObject(obj){ return JSON.stringify(obj) === '{}'; } 
65
23 янв. Atsakymą pateikė Ateszki sausio 23 d. 2013-01-23 23:07 '13, 23:07, 2013-01-23 23:07

Senas klausimas, bet jis turėjo problemų. Įjungus jQuery nėra gera idėja, jei vienintelis tikslas yra patikrinti, ar objektas yra tuščias. Vietoj to, tiesiog įveskite jQuery kodą ir gausite atsakymą:

 function isEmptyObject(obj) { var name; for (name in obj) { if (obj.hasOwnProperty(name)) { return false; } } return true; } 
54
31 янв. Atsakymą pateikė Jonathan Petitcolas 2013-01-31 13:55 '13, 13:55, 2013-01-31 13:55

Aš susiduriu su panašiomis situacijomis. Aš nenorėjau naudoti jQuery ir norėjau tai padaryti naudodamas gryną javascript.

O tai, ką dariau, naudojo šią sąlygą, ir ji dirbo man.

 var obj = {}; if(JSON.stringify(obj) === '{}') { //This will check if the object is empty //Code here.. } 

Jei naudojate ne vienodus, naudokite: JSON.stringify(obj) !== '{}'

Žr. JSFiddle

46
22 сент. Anish Nair atsakymas, rugsėjo 22 d 2014-09-22 08:38 '14, 8:38 2014-09-22 08:38

Yra paprastas būdas, jei esate naujesnėje naršyklėje. Object.keys(obj).length == 0

26
29 апр. atsakymas pateikiamas 29 balandžio 2012-04-29 22:25 '12, 10:25 val. 2012-04-29 22:25

Sukūriau pilną funkciją, kad nustatytumėte, ar objektas yra tuščias.

Jis naudoja „ Object.keys “ funkcionalumą iš ECMAScript 5 (ES5), jei įmanoma, norint pasiekti maksimalų našumą (žr. „ Suderinamumo diagramą“ ) ir grįžti prie suderinamiausio požiūrio senesniems mechanizmams (naršyklėms).

Sprendimas

  function isObjectEmpty(object) { if ('object' !== typeof object) { throw new Error('Object must be specified.'); } if (null === object) { return true; } if ('undefined' !== Object.keys) { // Using ECMAScript 5 feature. return (0 === Object.keys(object).length); } else { // Using legacy compatibility mode. for (var key in object) { if (object.hasOwnProperty(key)) { return false; } } return true; } } 

Tai yra šio kodo esmė .

Ir čia yra JSFiddle su demonstracija ir paprastu testu.

Tikiuosi, kad tai padės kam nors. Hooray!

21
21 мая '14 в 16:55 2014-05-21 16:55 atsakymą pateikė Slava Fomin II , gegužės 21 d. 14, 16:55 2014-05-21 16:55

Galite patikrinti Objekto raktų skaičių:

 if (Object.keys(a).length > 0) { // not empty } 
20
30 июня '17 в 13:11 2017-06-30 13:11 atsakymą pateikė Ashutosh Ranjan , birželio 30 d. 17, 13:11 2017-06-30 13:11
  • Tik problema. Ar trūksta duomenų, jei jūsų serveris gali sukurti tam tikrą ypatybę?

    Pavyzdžiui:

     var a = {empty:true}; 

    Tada galite lengvai jį patikrinti AJAX atgalinio ryšio kode.

  • Kitas būdas patikrinti:

     if (a.toSource() === "({})") // then 'a' is empty 

PAKEITIMAS : Jei naudojate JSON biblioteką (pvz., JSON.js), galite išbandyti JSON.encode () funkciją ir patikrinti tuščios vertės eilutę.

19
25 марта '09 в 14:48 2009-03-25 14:48 Atsakymą pateikė Thevs , kovo 25 d. , 09:48 , 2009-03-25 14:48

Object.keys (obj) .length naudojimas (kaip buvo pasiūlyta pirmiau ECMA 5+) yra 10 kartų mažesnis tuščių objektų atveju! laikykitės senosios mokyklos galimybės (už ...).

Išbandyta pagal „Node“, „Chrom“, „Firefox“ ir „IE 9“, akivaizdu, kad daugeliu atvejų:

  • (... in ...) yra greičiausias naudojimo atvejis!
  • „Object.keys“ (obj) .length yra tuščias 10 kartų lėčiau
  • JSON.stringify (obj) .length visada yra lėčiausias (nenuostabu)
  • Object.getOwnPropertyNames (obj) .length trunka ilgiau nei Object.keys (obj) ilgis kai kuriose sistemose gali būti daug ilgesnis.

Apatinės linijos efektas, naudokite:

 function isEmpty(obj) { for (var x in obj) { return false; } return true; } 

arba

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

Žr. Išsamius bandymų rezultatus ir testo kodą. Ar objektas tuščias?

17
28 дек. atsakymas duotas davidhadas 28 Dec. 2015-12-28 13:40 '16, 13:40 pm 2015-12-28 13:40

Aš jį naudoju.

 function isObjectEmpty(object) { var isEmpty = true; for(keys in object) { isEmpty = false; break; // exiting since we found that the object is not empty } return isEmpty; } 

Pavyzdžiui:

 var myObject = {}; // Object is empty var isEmpty = isObjectEmpty(myObject); // will return true; // populating the object myObject = {"name":"John Smith","Address":"Kochi, Kerala"}; // check if the object is empty isEmpty = isObjectEmpty(myObject); // will return false; 

iš čia

Atnaujinti

Or

Galite naudoti „jQuery“ įgyvendinimą „EmptyObject“

 function isEmptyObject ( obj ) { var name; for ( name in obj ) { return false; } return true; } 
15
08 июня '12 в 11:04 2012-06-08 11:04 atsakymas pateikiamas kiranvj birželio 8 d. 12 val. 11:04 2012-06-08 11:04

Toliau pateiktame pavyzdyje parodyta, kaip patikrinti, ar „JavaScript“ objektas yra tuščias, jei tuščias, neturime savų savybių.

Scenarijus veikia ES6.

10
29 марта '17 в 13:42 2017-03-29 13:42 atsakymą pateikė GibboK kovo 29 d. 17, 13:42 2017-03-29 13:42
 function isEmpty(obj) { for(var i in obj) { return false; } return true; } 
10
24 апр. Ikettu atsakymas balandžio 24 d 2009-04-24 16:09 '09, 04:09, 2009-04-24 16:09


Galite naudoti šį paprastą kodą, kurį jQuery ar kitos bibliotekos nenaudojo.

 var a=({}); //check is an empty object if(JSON.stringify(a)=='{}') { alert('it is empty'); } else { alert('it is not empty'); } 

JSON klasė ir jos funkcijos ( išanalizuoti ir griežti ) yra labai naudingos, tačiau yra keletas problemų, susijusių su IE7, kurias galite išspręsti naudodami šį paprastą kodą http://www.json.org/js.html .

Kitas paprastas metodas (paprasčiausias būdas):
Šį metodą galite naudoti nenaudodami jQuery arba JSON objekto .

 var a=({}); function isEmptyObject(obj) { if(typeof obj!='object') { //it is not object, so is not empty return false; } else { var x,i=0; for(x in obj) { i++; } if(i>0) { //this object has some properties or methods return false; } else { //this object has not any property or method return true; } } } alert(isEmptyObject(a)); //true is alerted 
9
28 авг. atsakymas duotas iman 28 rug. 2013-08-28 09:33 '13, 9:33, 2013-08-28 09:33

jQuery turi specialią funkciją, isEmptyObject() šiuo atveju yra „ isEmptyObject()

 jQuery.isEmptyObject({}) // true jQuery.isEmptyObject({ foo: "bar" }) // false 

Sužinokite daugiau apie http://api.jquery.com/jQuery.isEmptyObject/

9
25 янв. Atsakymą pateikė Anton Danilchenko sausio 25 d 2011-01-25 17:25 '11, 17:25, 2011-01-25 17:25

Geriausias būdas rasti:

 function isEmpty(obj) { if (!obj) { return true; } if (!(typeof(obj) === 'number')  !Object.keys(obj).length) { return true; } return false; } 

Veikia:

  t1: {} -> true t2: {0:1} -: false t3: [] -> true t4: [2] -> false t5: null -> true t6: undefined -> true t7: "" -> true t8: "a" -> false t9: 0 -> true t10: 1 -> false 
9
15 марта '17 в 16:32 2017-03-15 16:32 DiegoAraujo atsakymas yra kovo 15 d. 17, 16:32 2017-03-15 16:32

Jei jQuery ir interneto naršyklė nėra, underscore.js taip pat turi isEmpty funkciją.

 _.isEmpty({}) // returns true 

Be to, tai nereiškia, kad įvesties parametras yra objektas. Dėl sąrašo ar eilutės arba neapibrėžto, jis taip pat grąžins teisingą atsakymą.

8
14 янв. atsakymas duotas jichi 14 jan. 2014-01-14 06:02 '14 at 6:02 2014-01-14 06:02

Mano priėmimas:

 function isEmpty(obj) { return !Object.keys(obj).length > 0; } var a = {a:1, b:2} var b = {} console.log(isEmpty(a)); // false console.log(isEmpty(b)); // true 

Paprasčiausiai, nemanau, kad visos naršyklės šiuo metu įgyvendina Object.keys() .

8
31 окт. atsakymas pateikiamas NiKo 31 d. 2011-10-31 16:39 '11 at 16:39 2011-10-31 16:39

Aš norėčiau patikrinti, ar jis turi bent vieną raktą. Tai pakaktų man pasakyti, kad jis nėra tuščias.

 typeof obj !== "undefined"  Boolean(Object.keys(obj)[0]) 
8
11 сент. Atsakymas suteiktas Tudor Morar 11 sep. 2018-09-11 13:35 „18, 15:35 pm 2018-09-11 13:35

Paprasta kilpa:

 var is_empty = true; for(var i in obj) { is_empty = false; break; } 
5
10 апр. atsakymas pateikiamas Vad 10 balandžio. 2015-04-10 13:32 '15, 13:32 2015-04-10 13:32

Teisingas atsakymas yra:

5
09 апр. atsakymą pateikė Jesse balandžio 9 d. 2018-04-09 12:37 '18, 12:37 pm 2018-04-09 12:37

Pagal „Object.entries“ () ES2017 specifikaciją, čekis yra paprastas naudojant bet kurią modernią naršyklę -

 Object.entries({}).length === 0 
5
29 дек. Atsakymą pateikė Vikrant, gruodžio 29 d. 2018-12-29 12:11 '18 12:11 pm 2018-12-29 12:11

Protestas! Saugokitės JSON apribojimų.

 javascript: obj={ f:function(){} }; alert( "Beware!! obj is NOT empty!\n\nobj = { f:function(){} }" + "\n\nJSON.stringify( obj )\n\nreturns\n\n" + JSON.stringify( obj ) ); 

rodo

 Saugokitės!  obj NĖRA tuščias! obj = {f: funkcija () {}} JSON.stringify (obj) grąžina {}
5
24 мая '11 в 4:52 2011-05-24 04:52 atsakymas duotas Ekim, gegužės 24 d., 11 d., 4:52, 2011-05-24 04:52

Sugar.JS šiam tikslui suteikia išplėstinius objektus. Kodas yra švarus ir paprastas:

Padarykite išplėstinį objektą:

 a = Object.extended({}) 

Patikrinkite dydį:

 a.size() 
4
16 авг. Atsakymas, kurį pateikė mikemaccana , rugpjūčio 16 d. 2012-08-16 12:46 '12 12:46 2012-08-16 12:46

Be šių atsakymų:

 var o = {}; alert($.toJSON(o)=='{}'); // true var o = {a:1}; alert($.toJSON(o)=='{}'); // false 

tai jquery + jquery.json

4
26 февр. atsakymas suteiktas starikovs 26 vasaris 2010-02-26 15:33 '10, 15:33, 2010-02-26 15:33

Kita alternatyva yra naudoti „ is.js“ (14 kB ), o ne „ jquery“ (32kB), „ lodash“ (50kB) arba pabraukimo (16,4 kB). is.js pasirodė esanti greičiausia biblioteka tarp minėtų bibliotekų, kurią galima naudoti norint nustatyti, ar tuščias objektas.

http://jsperf.com/check-empty-object-using-libraries

Akivaizdu, kad visos šios bibliotekos nėra visiškai tokios pačios, taigi, jei jums reikia lengvai manipuliuoti DOM, tuomet džiaugsmas vis dar gali būti geras pasirinkimas, arba jei jums reikia daugiau nei tik tipo patikrinimas, tuomet gali būti geras. Kaip ir is.js , čia yra sintaksė:

 var a = {}; is.empty(a); // true is.empty({"hello": "world"}) // false 

Kaip pabrėžti ir lodash _.isObject() , tai taikoma ne tik objects , bet ir arrays ir strings .

Po gaubtu ši biblioteka naudoja Object.getOwnPropertyNames , kuris yra panašus į Object.keys , bet Object.getOwnPropertyNames yra išsamesnis, nes jis grąžins nesuskaičiuojamas ir nesuskaičiuojamas ypatybes, kaip aprašyta čia .

 is.empty = function(value) { if(is.object(value)){ var num = Object.getOwnPropertyNames(value).length; if(num === 0 || (num === 1  is.array(value)) || (num === 2  is.arguments(value))){ return true; } return false; } else { return value === ''; } }; 

Jei nenorite įeiti į biblioteką (tai suprantama), ir žinote, kad bandote objektus (o ne matricas ar eilutes), tada ši funkcija turėtų atitikti jūsų poreikius.

 function isEmptyObject( obj ) { return Object.getOwnPropertyNames(obj).length === 0; } 

Tai yra šiek tiek greitesnis nei is.js, bet tik todėl, kad netikrinate, ar jis yra objektas.

3
05 июня '15 в 20:16 2015-06-05 20:16 atsakymas pateikiamas cwadding birželis 05 '15 , 20:16 2015-06-05 20:16
  • 1
  • 2

Kiti klausimai apie „ žymes arba klausimo pateikimas