जावास्क्रिप्ट में कुछ जाँच रहा है?


85

जावास्क्रिप्ट में एक चर खाली होने पर मैं कैसे जांच सकता हूं? बेवकूफ सवाल के लिए क्षमा करें, लेकिन मैं जावास्क्रिप्ट में नौसिखिया हूँ!

if(response.photo) is empty {
    do something
else {
    do something else
}

response.photoJSON से था, और यह कभी-कभी खाली हो सकता है, खाली डेटा सेल! अगर खाली है तो जांच करना चाहता हूं।


2
यहाँ "खाली" का क्या अर्थ है? यदि आप निश्चित नहीं हैं, तो हमें कुछ कोड दिखाएं।
thejh

1
क्या इसका मतलब यह है कि अगर यह अभी तक असंवैधानिक है?
फ्रांज पेयर

1
क्या इसका मतलब यह है कि क्या यह मूल्यांकन करता है false?
फेलिक्स क्लिंग

2
क्या मतलब है अगर यह खाली स्ट्रिंग है?
मार्क बायर्स

यहां अधिक कार्य-योग्य तरीके से, PHPs empty()फंक्शन का जावास्क्रिप्ट कार्यान्वयन है । stackoverflow.com/a/33319704/3779853
phil294

जवाबों:


134

यदि आप एक खाली स्ट्रिंग के लिए परीक्षण कर रहे हैं:

if(myVar === ''){ // do stuff };

यदि आप एक ऐसे चर की जाँच कर रहे हैं जिसे घोषित किया गया है, लेकिन परिभाषित नहीं किया गया है:

if(myVar === null){ // do stuff };

यदि आप एक ऐसे चर की जाँच कर रहे हैं जिसे परिभाषित नहीं किया जा सकता है:

if(myVar === undefined){ // do stuff };

यदि आप दोनों की जाँच कर रहे हैं, या तो चर शून्य या अपरिभाषित है:

if(myVar == null){ // do stuff };

4
undefined"स्थिर" का उपयोग न करें , क्योंकि यह बिल्कुल स्थिर नहीं है। typeof myVar === 'undefined'इसके बजाय उपयोग करें ।
गुफा

3
नहीं। यदि एक चर घोषित किया गया है, लेकिन परिभाषित नहीं है तो यह शून्य नहीं है ... यह अपरिभाषित है। यदि आप एक ऐसे चर की जांच करते हैं जिसे घोषित नहीं किया गया है, तो आपको एक रनटाइम त्रुटि मिलेगी। साथ ही, var undefined = 1;आपके तीसरे उदाहरण को तोड़ देगा। हमेशा उपयोग करें typeofऔर जांच करें "undefined"
gilly3

@ जॉन वुडविक: यह पहला मामला होगा, खाली स्ट्रिंग।
thejh

2
if(typeof variable === "undefined")
एनक्यूबिका

यू मदद के लिए धन्यवाद
फणी

52

आपके विचार से यह एक बड़ा प्रश्न है। चर बहुत तरीकों से खाली कर सकते हैं। किन्दा उस पर निर्भर करता है जिसे आपको जानना आवश्यक है।

// quick and dirty will be true for '', null, undefined, 0, NaN and false.
if (!x) 

// test for null OR undefined
if (x == null)  

// test for undefined OR null 
if (x == undefined) 

// test for undefined
if (x === undefined) 
// or safer test for undefined since the variable undefined can be set causing tests against it to fail.
if (typeof x == 'undefined') 

// test for empty string
if (x === '') 

// if you know its an array
if (x.length == 0)  
// or
if (!x.length)

// BONUS test for empty object
var empty = true, fld;
for (fld in x) {
  empty = false;
  break;
}

@Tomalak उफ़, धन्यवाद। मुझे लगता है कि ट्रिपल बराबर वैकल्पिक है। प्रकार एक स्ट्रिंग लौटाएगा, कुछ भी नहीं किया जाएगा।
हेमलोक

यह सच है। वैसे भी आइडेंटिटी चेक से कोई नुकसान नहीं होता, मुझे लगता है। :-)
तोमलक

1
(x) NaN और [] के लिए भी सही होगा। (x == null) अशक्त या अपरिभाषित के लिए एक परीक्षण है।
पैट्रिक फिशर

1
ठीक है, मैं NaN के बारे में भूल गया। मुझे महसूस नहीं हुआ कि अशक्त के लिए परीक्षण ने अपरिभाषित के लिए परीक्षण के समान ही काम किया। !xहालांकि एक खाली सरणी के लिए सही नहीं है।
हेमलोक

11

यह सभी मामलों को कवर करना चाहिए:

function empty( val ) {

    // test results
    //---------------
    // []        true, empty array
    // {}        true, empty object
    // null      true
    // undefined true
    // ""        true, empty string
    // ''        true, empty string
    // 0         false, number
    // true      false, boolean
    // false     false, boolean
    // Date      false
    // function  false

        if (val === undefined)
        return true;

    if (typeof (val) == 'function' || typeof (val) == 'number' || typeof (val) == 'boolean' || Object.prototype.toString.call(val) === '[object Date]')
        return false;

    if (val == null || val.length === 0)        // null or 0 length array
        return true;

    if (typeof (val) == "object") {
        // empty object

        var r = true;

        for (var f in val)
            r = false;

        return r;
    }

    return false;
}

5

मैं ऊपर पोस्ट किए गए कई समाधानों में संभावित कमियों को देखता हूं, इसलिए मैंने अपना खुद का संकलन करने का फैसला किया।
नोट: यह Array.prototyp.some का उपयोग करता है , अपने ब्राउज़र समर्थन की जाँच करें।

नीचे दिए गए समाधान चर को खाली मानते हैं यदि निम्न में से कोई एक सत्य है:

  1. जे एस का मानना है कि चर के बराबर होता है false, जो पहले से ही की तरह बहुत सी बातें शामिल हैं 0, "", [], और यहां तक कि [""]और[0]
  2. मान है null या यह टाइप है'undefined'
  3. यह एक खाली वस्तु है
  4. यह एक ऐसा ऑब्जेक्ट / एरे है जिसमें केवल ऐसे मान होते हैं जो स्वयं खाली होते हैं (अर्थात इसके प्रत्येक भाग के प्राइमिटिव्स तक टूट जाते हैं false)। जाँच वस्तु / सरणी संरचना में पुनरावर्ती ड्रिल करता है। उदाहरण के लिए

    isEmpty({"": 0}) // true
    isEmpty({"": 1}) // false
    isEmpty([{}, {}])  // true
    isEmpty(["", 0, {0: false}]) //true
    

समारोह कोड:

/**
 * Checks if value is empty. Deep-checks arrays and objects
 * Note: isEmpty([]) == true, isEmpty({}) == true, isEmpty([{0:false},"",0]) == true, isEmpty({0:1}) == false
 * @param value
 * @returns {boolean}
 */
function isEmpty(value){
  var isEmptyObject = function(a) {
    if (typeof a.length === 'undefined') { // it's an Object, not an Array
      var hasNonempty = Object.keys(a).some(function nonEmpty(element){
        return !isEmpty(a[element]);
      });
      return hasNonempty ? false : isEmptyObject(Object.keys(a));
    }

    return !a.some(function nonEmpty(element) { // check if array is really not empty as JS thinks
      return !isEmpty(element); // at least one element should be non-empty
    });
  };
  return (
    value == false
    || typeof value === 'undefined'
    || value == null
    || (typeof value === 'object' && isEmptyObject(value))
  );
}

अच्छा लगा। आप मतभेदों को इंगित कर सकते हैं और यह उन कमियों को कैसे पूरा करता है जिनकी आपने पहचान की थी।
शॉन मेहान

1
मुझे यहां सभी निर्णयों के माध्यम से पुनरावृति की आवश्यकता होगी। ठीक। @Victorkohl और @kapa फ़ंक्शंस की तुलना में खदान पहले स्तर से अधिक गहराई तक जा सकती है और जटिल वस्तुओं की रिपोर्ट कर सकती है जो गैर-खाली दिखती हैं लेकिन वास्तव में केवल खाली-समान मानों से युक्त होती हैं। उदाहरण: [{},0,""]। यहां अन्य सभी समाधान केवल दो-लाइनर्स हैं जो दूरी और एक अंडरस्कोर फ़ंक्शन पर नहीं जाते हैं जो ऑब्जेक्ट्स के लिए काम करता है और आवश्यक है।
ओलेक्सी चेक्लाउएव

4

यहाँ मेरा सबसे सरल उपाय है।

PHP empty फ़ंक्शन से प्रेरित

function empty(n){
	return !(!!n ? typeof n === 'object' ? Array.isArray(n) ? !!n.length : !!Object.keys(n).length : true : false);
}

//with number
console.log(empty(0));        //true
console.log(empty(10));       //false

//with object
console.log(empty({}));       //true
console.log(empty({a:'a'}));  //false

//with array
console.log(empty([]));       //true
console.log(empty([1,2]));    //false

//with string
console.log(empty(''));       //true
console.log(empty('a'));      //false


3

Http://underscorejs.org/#isEmpty देखें

isEmpty_.isEmpty (ऑब्जेक्ट) यदि किसी एन्यूमरेबल ऑब्जेक्ट में कोई मान नहीं है (कोई एन्यूमरेबल स्वयं-प्रॉपर्टीज) नहीं है, तो सत्य है। स्ट्रिंग और सरणी जैसी वस्तुओं के लिए _.isEmpty जांचें यदि लंबाई संपत्ति 0 है।


3

एक समारोह में @inkednm से उत्तर का संयोजन:

   function isEmpty(property) {
      return (property === null || property === "" || typeof property === "undefined");
   }

property == nullसंयुक्त जांच के लिए उपयोग करें nullऔरundefined
SJ00

3

JSON की कुंजी पर खाली चेक उपयोग-केस पर निर्भर करता है। एक सामान्य उपयोग के मामले में, हम निम्नलिखित के लिए परीक्षण कर सकते हैं:

  1. नहीं null
  2. नहीं undefined
  3. खाली स्ट्रिंग नहीं ''
  4. एक खाली वस्तु नहीं है {} [] (ऐरे एक वस्तु है)

समारोह:

function isEmpty(arg){
  return (
    arg == null || // Check for null or undefined
    arg.length === 0 || // Check for empty String (Bonus check for empty Array)
    (typeof arg === 'object' && Object.keys(arg).length === 0) // Check for empty Object or Array
  );
}

इसके लिए सही लौटें:

isEmpty(''); // Empty String
isEmpty(null); // null
isEmpty(); // undefined
isEmpty({}); // Empty Object
isEmpty([]); // Empty Array

2

बस अगर कोई शर्त है, तो चर को किसी भी मान के अंदर रखें, यह सही और गलत है।

if (response.photo){ // if you are checking for string use this if(response.photo == "") condition
 alert("Has Value");
}
else
{
 alert("No Value");
};

इस 'रिक्त' का अर्थ है अशक्त ... लेकिन यह प्रश्नकर्ता के प्रश्न से स्पष्ट नहीं है कि यह उनका क्या मतलब है। उत्तर देने से पहले, या कम से कम इसे अपने उत्तर में एक धारणा के रूप में बताने से पहले स्पष्ट करना बेहतर होगा।
मीर


0

यह निर्भर करता है कि आप "खाली" से क्या मतलब है। सबसे सामान्य पैटर्न यह देखना है कि चर अपरिभाषित है या नहीं । उदाहरण के लिए, कई लोग एक अशक्त जांच भी करते हैं:
if (myVariable === undefined || myVariable === null)...

या, छोटे रूप में:
if (myVariable || myVariable === null)...


undefined"स्थिर" का उपयोग न करें , क्योंकि यह बिल्कुल स्थिर नहीं है। typeof myVar === 'undefined'इसके बजाय उपयोग करें ।
गुफा

ये दोनों रूप एक जैसे नहीं हैं।
कापा

सच है, एक अपरिभाषित प्रकार है, लेकिन मानक को उद्धृत करने के लिए: एक संदर्भ एक हल नाम बंधन है। एक संदर्भ में तीन घटक होते हैं, आधार मूल्य, संदर्भित नाम और बूलियन का सख्त संदर्भ ध्वज होता है। आधार मूल्य या तो अपरिभाषित है, एक वस्तु, एक बूलियन, एक स्ट्रिंग, एक संख्या, या एक पर्यावरण रिकॉर्ड (10.2.1)। अपरिभाषित का एक आधार मूल्य इंगित करता है कि संदर्भ को एक बंधन में हल नहीं किया जा सकता है।
बॉबी डी

0
if (myVar == undefined)

यह देखने के लिए काम करेगा कि क्या संस्करण घोषित किया गया है, लेकिन नहीं।


1
यह खतरनाक है क्योंकि undefinedकोड में पुनर्परिभाषित किया जा सकता है (अर्थात undefined = trueवैध है)।
तोमलक

undefined"स्थिर" का उपयोग न करें , क्योंकि यह बिल्कुल स्थिर नहीं है। typeof myVar === 'undefined'इसके बजाय उपयोग करें ।
गुफा

0

अपरिभाषित के लिए जाँच करें:

if (typeof response.photo == "undefined")
{
    // do something
}

यह vb के विषुव को करेगा IsEmpty । यदि मायवर में कोई मान है, यहां तक ​​कि अशक्त, खाली स्ट्रिंग या 0, तो यह "खाली" नहीं है।

यह जाँचने के लिए कि एक चर या संपत्ति मौजूद है, उदाहरण के लिए, यह घोषित किया गया है, हालांकि यह परिभाषित नहीं किया गया है, आप inऑपरेटर का उपयोग कर सकते हैं ।

if ("photo" in response)
{
    // do something
}

0

यदि आप PHP के emptyफ़ंक्शन के बराबर देख रहे हैं , तो इसे देखें:

function empty(mixed_var) {
  //   example 1: empty(null);
  //   returns 1: true
  //   example 2: empty(undefined);
  //   returns 2: true
  //   example 3: empty([]);
  //   returns 3: true
  //   example 4: empty({});
  //   returns 4: true
  //   example 5: empty({'aFunc' : function () { alert('humpty'); } });
  //   returns 5: false

  var undef, key, i, len;
  var emptyValues = [undef, null, false, 0, '', '0'];

  for (i = 0, len = emptyValues.length; i < len; i++) {
    if (mixed_var === emptyValues[i]) {
      return true;
    }
  }

  if (typeof mixed_var === 'object') {
    for (key in mixed_var) {
      // TODO: should we check for own properties only?
      //if (mixed_var.hasOwnProperty(key)) {
      return false;
      //}
    }
    return true;
  }

  return false;
}

http://phpjs.org/functions/empty:392


0

मुझे क्या याद आ रहा है अगर खाली एरे ... कीलेस ऑब्जेक्ट ... फ़ालिसिटी कास्ट isEmpty = o => Array.isArray (o) &&! o.join ('') लंबाई typeof o === 'ऑब्जेक्ट' &&! object.keys (o) .length || ! (+ मूल्य);


0

यहाँ खाली चर की जाँच करने के लिए एक सरल (संक्षिप्त) समाधान है। यह फ़ंक्शन जाँचता है कि कोई चर खाली है या नहीं। प्रदान किए गए चर में मिश्रित मूल्य (शून्य, अपरिभाषित, सरणी, ऑब्जेक्ट, स्ट्रिंग, पूर्णांक, फ़ंक्शन) हो सकते हैं।

function empty(mixed_var) {
 if (!mixed_var || mixed_var == '0') {
  return true;
 }
 if (typeof mixed_var == 'object') {
  for (var k in mixed_var) {
   return false;
  }
  return true;
 }
 return false;
}

//   example 1: empty(null);
//   returns 1: true

//   example 2: empty(undefined);
//   returns 2: true

//   example 3: empty([]);
//   returns 3: true

//   example 4: empty({});
//   returns 4: true

//   example 5: empty(0);
//   returns 5: true

//   example 6: empty('0');
//   returns 6: true

//   example 7: empty(function(){});
//   returns 7: false

अजीब ... मैंने इस समाधान को अभी तक ऑनलाइन पोस्ट नहीं देखा है, लेकिन "!" अधिकांश मूल्यों की जाँच का ध्यान रखना चाहिए
J Carrillo

0

const isEmpty = val => val == null || !(Object.keys(val) || val).length;


मुझे समझ में नहीं आता है, उपयोगकर्ता ने पूछा कि जावास्क्रिप्ट में खाली की जांच कैसे करें, इसलिए मुझे लगता है कि उपयोगकर्ता जावास्क्रिप्ट को जानता है, अगर सिंटैक्स ज्ञात है तो मुझे अपना जवाब समझाने की कोई आवश्यकता नहीं है?
इस्माइल ओलिव

वर्णन के कुछ और शब्दों को जोड़ना बेहतर होगा: (शायद अन्य लोग भी समझना चाहते हैं।
RtmY

0

function isEmpty(variable) {
  const type = typeof variable
  if (variable === null) return true
  if (type === 'undefined') return true
  if (type === 'boolean') return false
  if (type === 'string') return !variable
  if (type === 'number') return false
  if (Array.isArray(variable)) return !variable.length
  if (type === 'object') return !Object.keys(variable).length
  return !variable
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.