javascript - मैं एक खाली जावास्क्रिप्ट ऑब्जेक्ट के लिए कैसे परीक्षण करूं?




json (20)

AJAX अनुरोध के बाद, कभी-कभी मेरा एप्लिकेशन एक खाली ऑब्जेक्ट वापस कर सकता है, जैसे:

var a = {};

मैं कैसे जांच सकता हूं कि यह मामला है या नहीं?


  1. बस एक कामकाज। क्या कोई सर्वर डेटा के मामले में कुछ विशेष संपत्ति उत्पन्न कर सकता है?

    उदाहरण के लिए:

    var a = {empty:true};

    फिर आप इसे अपने AJAX कॉलबैक कोड में आसानी से देख सकते हैं।

  2. इसे जांचने का एक और तरीका:

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

संपादित करें : यदि आप किसी भी JSON लाइब्रेरी (fe JSON.js) का उपयोग करते हैं तो आप JSON.encode () फ़ंक्शन का प्रयास कर सकते हैं और खाली मान स्ट्रिंग के विरुद्ध परिणाम का परीक्षण कर सकते हैं।


JSON.stringify का उपयोग करने के बारे में कैसे? यह लगभग सभी आधुनिक ब्राउज़रों में उपलब्ध है।

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

आप Underscore उपयोग कर सकते हैं।

_.isEmpty({}); // true

आप ऑब्जेक्ट कुंजी की गिनती की जांच कर सकते हैं:

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

इस मामले के लिए jQuery में विशेष कार्य है isEmptyObject() :

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

jQuery पर और पढ़ें


एक अन्य विकल्प है is.js (32kb), lodash (50kB), या underscore (16.4 केबी) के विपरीत is.js (14kb) का उपयोग करना है। is.js उपरोक्त पुस्तकालयों के बीच सबसे तेज़ लाइब्रेरी साबित हुआ है जिसका उपयोग यह निर्धारित करने के लिए किया जा सकता है कि कोई ऑब्जेक्ट खाली है या नहीं।

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

जाहिर है, ये सभी पुस्तकालय बिल्कुल समान नहीं हैं, इसलिए यदि आपको आसानी से डीओएम में हेरफेर करने की आवश्यकता है तो jquery अभी भी एक अच्छी पसंद हो सकती है या यदि आपको केवल जांच प्रकार से अधिक की आवश्यकता है तो lodash या underscore अच्छा हो सकता है। is.js , यहां वाक्यविन्यास है:

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

अंडरस्कोर और लॉनाश की _.isObject() , यह विशेष रूप से objects लिए नहीं है बल्कि arrays और strings पर भी लागू होता है।

हुड के तहत यह लाइब्रेरी Object.getOwnPropertyNames का उपयोग कर Object.getOwnPropertyNames जो Object.getOwnPropertyNames समान है लेकिन Object.getOwnPropertyNames एक और गहन है क्योंकि यह here वर्णित Object.getOwnPropertyNames और गैर-गणना योग्य गुणों को वापस कर देगा।

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

यदि आप एक पुस्तकालय (जो समझ में आता है) लाने के लिए नहीं चाहते हैं और आप जानते हैं कि आप केवल वस्तुओं की जांच कर रहे हैं (सरणी या स्ट्रिंग नहीं) तो निम्न कार्य आपकी आवश्यकताओं के अनुरूप होना चाहिए।

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

यह is.js की तुलना में केवल थोड़ा तेज़ है हालांकि सिर्फ इसलिए कि आप यह जांच नहीं रहे हैं कि यह एक वस्तु है या नहीं।


एक साधारण पाश:

var is_empty = true;
for(var i in obj) {
    is_empty = false;
    break;
}

ऐसा करने का कोई आसान तरीका नहीं है। आपको गुणों पर स्पष्ट रूप से लूप करना होगा:

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

    return true;
}

यदि ECMAScript 5 समर्थन उपलब्ध है, तो आप इसके बजाय Object.keys() उपयोग कर सकते हैं:

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

चेतावनी! JSON की सीमाओं से सावधान रहें।

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

प्रदर्शित करता है

    Beware!! obj is NOT empty!

    obj = {  f:function(){}  }

    JSON.stringify( obj )

    returns

    {}

निम्न उदाहरण दिखाता है कि जावास्क्रिप्ट ऑब्जेक्ट खाली है या नहीं, अगर खाली हो तो इसका मतलब है कि इसका कोई गुण नहीं है।

लिपि ईएस 6 पर काम करता है।

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


मेरा स्वीकार कर लेना:

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

बस, मुझे नहीं लगता कि सभी ब्राउज़र्स वर्तमान में Object.keys() लागू Object.keys()


मैं इसका उपयोग कर रहा हूँ।

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

उदाहरण के लिए:

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;

यहां से

अद्यतन करें

या

आप isEmptyObject के jQuery कार्यान्वयन का उपयोग कर सकते हैं

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

मैं बस एक समान स्थिति में भाग गया। मैं JQuery का उपयोग नहीं करना चाहता था, और शुद्ध जावास्क्रिप्ट का उपयोग करके ऐसा करना चाहता था।

और मैंने जो किया वह निम्नलिखित शर्त का उपयोग करता था, और यह मेरे लिए काम करता था।

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

इसके बराबर नहीं, इसका उपयोग करें: JSON.stringify(obj) !== '{}'

इस JSFiddle


मैंने पाया सबसे अच्छा तरीका:

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

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

    return false;
}

के लिए काम करता है:

    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

यदि jQuery और वेब ब्राउज़र उपलब्ध नहीं है, तो अंडरस्कोर.जेएस में एक इफेक्ट फ़ंक्शन भी है।

_.isEmpty({}) // returns true

इसके अतिरिक्त, यह इनपुट पैरामीटर को ऑब्जेक्ट नहीं मानता है। किसी सूची या स्ट्रिंग या अपरिभाषित के लिए, यह सही उत्तर भी चालू कर देगा।


यदि आप एक नए ब्राउज़र पर हैं तो एक आसान तरीका है। Object.keys(obj).length == 0


सही जवाब है:

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

यह जांचता है कि:

  • ऑब्जेक्ट की कोई गुण नहीं है (गणना की परवाह किए बिना)।
  • वस्तु का कोई संपत्ति गुण नहीं है।
  • ऑब्जेक्ट का प्रोटोटाइप बिल्कुल Object.prototype

दूसरे शब्दों में, ऑब्जेक्ट {} के साथ बनाए गए एक से अलग है।


Sugar.JS इस उद्देश्य के लिए विस्तारित वस्तुओं प्रदान करता है। कोड स्वच्छ और सरल है:

एक विस्तारित वस्तु बनाएं:

a = Object.extended({})

इसका आकार जांचें:

a.size()


आप इस सरल कोड का उपयोग कर सकते हैं जिसने jQuery या अन्य पुस्तकालयों का उपयोग नहीं किया है

var a=({});

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

जेएसओएन क्लास और इसके फ़ंक्शन ( पार्स और स्ट्रिंगिफ़ाई ) बहुत उपयोगी हैं लेकिन आईई 7 के साथ कुछ समस्याएं हैं जिन्हें आप इसे सरल कोड http://www.json.org/js.html ठीक कर सकते हैं।

अन्य सरल तरीका (सबसे आसान तरीका):
आप jQuery या JSON ऑब्जेक्ट का उपयोग किए बिना इस तरह का उपयोग कर सकते हैं।

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

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





json