Bo┼č bir JavaScript nesnesini nas─▒l test ederim?


Al─▒nan cevaba git


Bir AJAX iste─činden sonra, bazen uygulamam a┼ča─č─▒daki gibi bo┼č bir nesne d├Ând├╝rebilir:

 var a = {};
 

Bunun b├Âyle olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim?


2641









Cevap say─▒s─▒n─▒ say: 30






ECMA 7+ :

 // because Object.entries(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
 

ECMA ├ľncesi 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
 

Alt ├žizgi :

 _.isEmpty({}); // true
 

Hoek

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

ExtJS

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

AngularJS (s├╝r├╝m 1)

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

Ramda

 R.isEmpty({}); // true
 

4599







Bunu yapman─▒n kolay bir yolu yok. A├ž─▒k├ža ├Âzellikler ├╝zerinde d├Âng├╝ yapman─▒z gerekecek:

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

    return true;
}
 

E─čer ECMAScript 5 deste─či mevcuttur kullanabilirsiniz Object.keys() yerine:

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

819







Ayn─▒ soruna sahip olan ancak jQuery kullananlar i├žin, jQuery.isEmptyObject ├Â─česini kullanabilirsiniz .


557







Bu benim tercih etti─čim ├ž├Âz├╝m:

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

245







Underscore.js'i kullanabilirsiniz .

 _.isEmpty({}); // true
 

197







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

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


112







JSON.stringify'─▒ kullanmaya ne dersiniz? T├╝m modern taray─▒c─▒larda neredeyse kullan─▒labilir.

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

77







Eski soru, ama sadece sorun vard─▒. JQuery'yi dahil etmek, tek amac─▒n─▒z nesnenin bo┼č olmad─▒─č─▒n─▒ kontrol etmekse iyi bir fikir de─čildir. Bunun yerine, JQuery'nin kodunun derinliklerine girin ; cevab─▒ alacaks─▒n─▒z:

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

59







Sadece benzer bir durumla kar┼č─▒la┼čt─▒m. JQuery kullanmak istemedim ve bunu saf Javascript kullanarak yapmak istedim.

Yapt─▒─č─▒m ┼čey ┼ču ko┼čulu kullanmakt─▒ ve benim i├žin i┼če yarad─▒.

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

E┼čit olmamak i├žin ┼čunu kullan─▒n: JSON.stringify(obj) !== '{}'

Bu JSFiddle'a g├Âz at─▒n


54







Daha yeni bir taray─▒c─▒ kullan─▒yorsan─▒z, basit bir yolu var. Object.keys(obj).length == 0


35







Object tu┼člar─▒n─▒n say─▒s─▒n─▒ kontrol edebilirsiniz:

 if (Object.keys(a).length > 0) {
    // not empty
}
 

28







  1. Sadece bir ge├žici ├ž├Âz├╝m. Sunucunuz veri yoksa baz─▒ ├Âzel m├╝lkler ├╝retebilir mi?

    ├ľrne─čin:

     var a = {empty:true};
     

    Ard─▒ndan AJAX geri ├ža─č─▒rma kodunuzda kolayca kontrol edebilirsiniz.

  2. Kontrol etmenin ba┼čka bir yolu:

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

EDIT : Herhangi bir JSON k├╝t├╝phanesi kullan─▒yorsan─▒z (fe JSON.js), JSON.encode () i┼člevini deneyebilir ve sonucu bo┼č de─čer dizesine kar┼č─▒ test edebilirsiniz.


24







Nesnenin bo┼č olup olmad─▒─č─▒n─▒ belirlemek i├žin tam bir fonksiyon olu┼čturdum.

Bu kullan─▒r Object.keys dan ECMAScript 5 en iyi performans─▒ (bkz elde etmek m├╝mk├╝nse (ES5) i┼člevselli─či uyumluluk tablosu eski motorlara (taray─▒c─▒lar) i├žin en uyumlu yakla┼č─▒ma) ve yedeklerini.

├ç├Âz├╝m

 /**
 * Returns true if specified object has no properties,
 * false otherwise.
 *
 * @param {object} object
 * @returns {boolean}
 */
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;
    }
}
 

─░┼čte bu kod i├žin Gist .

Ve i┼čte g├Âsteri ve basit bir test ile JSFiddle .

Umar─▒m birine yard─▒m eder. ┼×erefe!


23







Object.keys (obj) .length kullan─▒m─▒ (yukar─▒da ECMA 5+ i├žin ├Ânerildi─či gibi) bo┼č nesneler i├žin 10 kat daha yava┼čt─▒r! eski okula devam et (... i├žin) se├žene─čiyle.

D├╝─č├╝m, Chrom, Firefox ve IE 9 alt─▒nda test edildi─činde, ├žo─ču durumda a┼ča─č─▒dakiler ortaya ├ž─▒kt─▒:

  • (... i├žin ... i├žinde) kullanmak i├žin en h─▒zl─▒ se├ženektir!
  • Object.keys (obj) .length, bo┼č nesneler i├žin 10 kat daha yava┼č
  • JSON.stringify (obj) .length her zaman en yava┼č oland─▒r ( ┼ča┼č─▒rt─▒c─▒ de─čil)
  • Object.getOwnPropertyNames (obj) .length , baz─▒ sistemlerde Object.keys (obj) .length ├Â─česinden daha uzun s├╝rer .

Alt sat─▒r performans─▒ ak─▒ll─▒ca, kullan─▒n:

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

veya

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

Ayr─▒nt─▒l─▒ test sonu├žlar─▒na ve test koduna bak─▒n─▒z Nesne bo┼č mu?


22







Bunu kullan─▒yorum

 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;
}
 

├ľrne─čin:

 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;
 

buradan

G├╝ncelle┼čtirme

VEYA

isEmptyObject'in jQuery uygulamas─▒n─▒ kullanabilirsiniz.

 function isEmptyObject ( obj ) {
        var name;
        for ( name in obj ) {
            return false;
        }
        return true;
    }
 

16







A┼ča─č─▒daki ├Ârnek, bir JavaScript nesnesinin bo┼č olup olmad─▒─č─▒n─▒ nas─▒l test edece─čini g├Âsterir, e─čer bo┼čsa, buna g├Âre kendi ├Âzelliklerimiz yoktur.

Betik ES6'da ├žal─▒┼č─▒r.

 const isEmpty = (obj) => {
    if (obj === null ||
        obj === undefined ||
        Array.isArray(obj) ||
        typeof obj !== 'object'
    ) {
        return true;
    }
    return Object.getOwnPropertyNames(obj).length === 0;
};
console.clear();
console.log('-----');
console.log(isEmpty(''));           // true
console.log(isEmpty(33));           // true
console.log(isEmpty([]));           // true
console.log(isEmpty({}));           // true
console.log(isEmpty({ length: 0, custom_property: [] })); // false
console.log('-----');
console.log(isEmpty('Hello'));      // true
console.log(isEmpty([1, 2, 3]));    // true
console.log(isEmpty({ test: 1 }));  // false
console.log(isEmpty({ length: 3, custom_property: [1, 2, 3] })); // false
console.log('-----');
console.log(isEmpty(new Date()));   // true
console.log(isEmpty(Infinity));     // true
console.log(isEmpty(null));         // true
console.log(isEmpty(undefined));    // true 


14







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

12


2009-04-24





Object.entries () 'deki ES2017 spesifikasyonuna g├Âre, herhangi bir modern taray─▒c─▒ kullan─▒larak kontrol basittir.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

 Object.entries({}).length === 0
 

12







jQuery isEmptyObject() bu durum i├žin ├Âzel bir i┼čleve sahiptir :

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

Daha fazlas─▒ i├žin: http://api.jquery.com/jQuery.isEmptyObject/


11


2011-01-25





En az bir anahtar olup olmad─▒─č─▒n─▒ kontrol etmeye giderdim. Bu bana bo┼č olmad─▒─č─▒n─▒ s├Âylemek i├žin yeterli olurdu.

 typeof obj !== "undefined" && Boolean(Object.keys(obj)[0])
 

11







Kaputun alt─▒nda, t├╝m k├╝t├╝phanelerdeki t├╝m bo┼č kontrol y├Ântemleri, mant─▒─č─▒ kontrol eden nesne anahtarlar─▒n─▒ kullan─▒r. Onun tuhaf bir yolu tarif y├Ântemi, koyabilirsiniz hangi anla┼č─▒labilir hale getirmek i├žin buraya .

 for(key in obj){
   //your work here.
 break;
}
 

ES5'te geli┼čen , art─▒k basit├že Object.Keys nesneyi parametre olarak alan y├Ântemi kullanarak nesnenin anahtar uzunlu─čunu kontrol edebilirsiniz :

 if(Object.keys(obj).length > 0){
 //do your work here
}
 

Ya da Lodash kullan─▒yorsan─▒z (olmal─▒s─▒n─▒z) o zaman.

  _.isEmpty(obj) //==true or false
 

11








jQuery veya di─čer k├╝t├╝phaneleri kullanmayan bu basit kodu kullanabilirsiniz.

 var a=({});

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

JSON s─▒n─▒f─▒ ve i┼člevleri ( ayr─▒┼čt─▒rma ve stringify ) ├žok kullan─▒┼čl─▒d─▒r, ancak IE7 ile http://www.json.org/js.html bu basit kodla d├╝zeltebilece─činiz baz─▒ problemleri vard─▒r .

Di─čer Basit Yol (en basit Yol): jQuery veya JSON nesnesi
kullanmadan bu yolu kullanabilirsiniz .

 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
 

10


2013-08-28





Buldu─čum en iyi yol:

 function isEmpty(obj)
{
    if (!obj)
    {
        return true;
    }

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

    return false;
}
 

─░├žin ├žal─▒┼č─▒yor:

     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
 

10







Benim almak:

 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
 

Sadece, Object.keys() ┼ču anda t├╝m taray─▒c─▒lar─▒n uyguland─▒─č─▒n─▒ sanm─▒yorum .


9


2011-10-31





JQuery ve web taray─▒c─▒s─▒ kullan─▒lam─▒yorsa, underscore.js dosyas─▒nda bir isEmpty i┼člevi de vard─▒r.

 _.isEmpty({}) // returns true
 

Ek olarak, giri┼č parametresinin bir nesne oldu─ču varsay─▒lmaz. Bir liste veya dize veya tan─▒ms─▒z i├žin do─čru cevab─▒ da ├ževirecektir.


9







Uyar─▒! JSON'un s─▒n─▒rlamalar─▒na dikkat edin.

 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 ) );
 

g├Âr├╝nt├╝ler

    Dikkat!! obj bo┼č de─čil!

    obj = {f: function () {}}

    JSON.stringify (obj)

    d├Âner

    {}

6


2011-05-24





Do─čru cevap:

 const isEmptyObject = obj =>
  Object.getOwnPropertyNames(obj).length === 0 &&
  Object.getOwnPropertySymbols(obj).length === 0 &&
  Object.getPrototypeOf(obj) === Object.prototype;
 

Bu kontrol eder:

  • Nesnenin kendi ├Âzellikleri yoktur (numaraland─▒r─▒labilirlikten ba─č─▒ms─▒z olarak).
  • Nesnenin kendi ├Âzellik sembolleri yoktur.
  • Nesnenin prototipi tam olarak Object.prototype .

Ba┼čka bir deyi┼čle, nesne, yarat─▒lm─▒┼č olandan ay─▒rt edilemez {} .


6







Thevs'in cevab─▒na ek olarak:

 var o = {};
alert($.toJSON(o)=='{}'); // true

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

bu jquery + jquery.json oldu─čunu


5







Sugar.JS bu ama├ž i├žin geni┼čletilmi┼č nesneler sa─člar. Kod temiz ve basittir:

Geni┼čletilmi┼č bir nesne yap─▒n:

 a = Object.extended({})
 

Boyutunu kontrol et:

 a.size()
 

5







Ba┼čka alternatif kullan─▒m i├žin is.js kar┼č─▒ (14kB) jquery (32 KB), lodash (50kB) veya ├žizgi (16.4kB). is.js, bir nesnenin bo┼č olup olmad─▒─č─▒n─▒ belirlemek i├žin kullan─▒labilecek yukar─▒da belirtilen k├╝t├╝phaneler aras─▒nda en h─▒zl─▒ kitapl─▒k oldu─čunu kan─▒tlad─▒.

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

A├ž─▒k├žas─▒, t├╝m bu k├╝t├╝phaneler ayn─▒ de─čildir, bu y├╝zden DOM'u kolayca manip├╝le etmeniz gerekiyorsa, jquery hala iyi bir se├žim olabilir veya sadece tip kontrol├╝nden daha fazlas─▒na ihtiyac─▒n─▒z varsa lodash veya alt ├žizgi iyi olabilir. Gelince is.js , burada s├Âzdizimi:

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

Alt ├žizgi ve tevazu gibi _.isObject() , bu sadece i├žin objects de─čil, ayn─▒ zamanda arrays ve i├žin de ge├žerlidir strings .

Davlumbaz─▒n alt─▒nda, bu kitapl─▒k, burada a├ž─▒kland─▒─č─▒ gibi numaraland─▒r─▒labilir ve numaraland─▒r─▒lamayan ├Âzellikler d├Ând├╝rece─činden Object.getOwnPropertyNames benzer olan Object.keys ancak Object.getOwnPropertyNames daha kapsaml─▒ olan bir k├╝t├╝phane kullan─▒yor .https://stackoverflow.com/questions/22658488/object-getownpropertynames-vs-object-keys

 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 === '';
    }
};
 

Bir kitapl─▒k getirmek istemiyorsan─▒z (anla┼č─▒labilir) ve yaln─▒zca nesneleri kontrol etti─činizi (diziler veya dizeler de─čil) biliyorsan─▒z, a┼ča─č─▒daki i┼člev ihtiya├žlar─▒n─▒z─▒ kar┼č─▒lamal─▒d─▒r.

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

Bu, sadece bir nesne olup olmad─▒─č─▒n─▒ kontrol etmedi─činiz i├žin is.js'den biraz daha h─▒zl─▒d─▒r.


4



─░lgili yay─▒nlar


Bir JavaScript nesnesini do─čru ┼čekilde klonlayabilir miyim?

Javascript'te bir Nesneler Dizisi'ni nas─▒l klonlars─▒n─▒z?

Bo┼č bir diziyi C# ile nas─▒l ba┼člatabilirim?

NumPy'de bo┼č bir dizi / matris nas─▒l olu┼čturabilirim?

Ng-click kullanarak bir ├Â─čeyi veya nesneyi diziden nas─▒l silerim?

JavaScript isDOM - Bir JavaScript Nesnesinin DOM Nesnesi olup olmad─▒─č─▒n─▒ nas─▒l kontrol edersiniz?

Bo┼č bir dizgiyi jquery-out-the-the-box-out ile test etmenin en iyi yolu nedir?

Go'da bo┼č bir dize i├žin test etmenin en iyi yolu nedir?

YAML'da bo┼č bir dizi nas─▒l olu┼čturabilirim?

Python'da bo┼č bir diziyi nas─▒l bulurum?

Etiketle ilgili di─čer sorular [javascript]


Android Studio'da t├╝m projedeki bir dizgenin t├╝m olu┼čumlar─▒n─▒ aray─▒n

Android Studio'da SHA-1 parmak izi sertifikas─▒n─▒ hata ay─▒klama modu i├žin nas─▒l edinebilirim?

C# s├Âzl├╝─č├╝n├╝ de─čerlerle ba┼člatman─▒n do─čru yolu?

Visual Studio'yu aspx / ascx dosyalar─▒ i├žin .designer dosyalar─▒n─▒ yeniden olu┼čturmaya nas─▒l zorlars─▒n─▒z?

C++ 'arkada┼č─▒n─▒' ne zaman kullanmal─▒s─▒n?

Android'de bir resim g├Âr├╝n├╝m├╝ i├žin s─▒n─▒r?

Belirli kurallar─▒ iptables'dan nas─▒l kald─▒rabilirim?

Bir iPhone uygulamas─▒ geli┼čtirmenin maliyeti nedir? [kapal─▒]

VS Kodunu di─čer dosya uzant─▒lar─▒n─▒ belirli dil olarak de─čerlendirmek i├žin nas─▒l yap─▒l─▒r?

Perl i├žin etkile┼čimli konsolu nas─▒l ba┼člatabilirim?