Überprüfen, ob etwas in Javascript leer ist?

83

Wie kann ich überprüfen, ob eine Variable in Javascript leer ist? Entschuldigung für die dumme Frage, aber ich bin ein Neuling in Javascript!

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

response.photowar von JSON, und es könnte manchmal leer sein, leere Datenzellen! Ich möchte überprüfen, ob es leer ist.

Jhon Woodwrick
quelle
2
Was bedeutet hier "leer"? Wenn Sie sich nicht sicher sind, zeigen Sie uns einen Code.
thejh
1
Meinst du, wenn es noch nicht initialisiert ist?
Franz Payer
1
Meinst du, ob es bewertet wird false?
Felix Kling
2
Meinst du, wenn es die leere Zeichenfolge ist?
Mark Byers
Hier ist eine JavaScript-Implementierung der Funktion PHPs empty(), die besser lesbar ist. stackoverflow.com/a/33319704/3779853
phil294

Antworten:

131

Wenn Sie auf eine leere Zeichenfolge testen:

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

Wenn Sie nach einer Variablen suchen, die deklariert, aber nicht definiert wurde:

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

Wenn Sie nach einer Variablen suchen, die möglicherweise nicht definiert ist:

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

Wenn Sie beide überprüfen, dh entweder ist die Variable null oder undefiniert:

if(myVar == null){ // do stuff };
brettkelly
quelle
4
Verwenden Sie nicht die undefined"Konstante", da sie überhaupt keine Konstante ist. Verwenden Sie typeof myVar === 'undefined'stattdessen.
Guffa
3
Nee. Wenn eine Variable deklariert, aber nicht definiert wurde, ist sie nicht null ... sie ist undefiniert. Wenn Sie nach einer Variablen suchen, die nicht deklariert wurde, wird ein Laufzeitfehler angezeigt. Auch var undefined = 1;wird Ihr drittes Beispiel brechen. Immer verwenden typeofund prüfen "undefined".
Gilly3
@Jhon Woodwrick: Das wäre der erste Fall, leere Zeichenfolge.
thejh
2
if(typeof variable === "undefined")
Ncubica
Vielen Dank für
Ihre
52

Dies ist eine größere Frage als Sie denken. Variablen können auf viele Arten leer sein. Ein bisschen hängt davon ab, was Sie wissen müssen.

// 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;
}
Schierling
quelle
@Tomalak Ups, danke. Ich denke, dass das Triple Equals optional ist. Der Typ von gibt eine Zeichenfolge zurück, es wird nichts erzwungen.
Hemlock
Das ist richtig. Wie auch immer, die Identitätsprüfung tut nicht weh, denke ich. :-)
Tomalak
1
(! x) gilt auch für NaN und []. (x == null) ist ein Test für null oder undefiniert.
Patrick Fisher
1
Richtig, ich habe NaN vergessen. Mir war nicht klar, dass der Test für Null genauso funktioniert wie der Test für undefiniert. !xgilt jedoch nicht für ein leeres Array.
Hemlock
11

Dies sollte alle Fälle abdecken:

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;
}
Pluto Welpe
quelle
5

Ich sehe potenzielle Mängel in vielen der oben genannten Lösungen, daher habe ich beschlossen, meine eigenen zu kompilieren.
Hinweis: Es wird Array.prototype.some verwendet . Überprüfen Sie die Unterstützung Ihres Browsers.

Die folgende Lösung betrachtet die Variable als leer, wenn eine der folgenden Bedingungen erfüllt ist:

  1. JS denkt , dass Variable ist gleich false, die schon viele Dinge wie bedeckt 0, "", [], und auch [""]und[0]
  2. Wert ist nulloder es ist Typ'undefined'
  3. Es ist ein leeres Objekt
  4. Es ist ein Objekt / Array, das nur aus Werten besteht, die selbst leer sind (dh in Grundelemente zerlegt, denen jeder Teil entspricht false). Überprüft den Drill rekursiv in der Objekt- / Array-Struktur. Z.B

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

Funktionscode:

/**
 * 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))
  );
}
Oleksii Chekulaiev
quelle
Nett. Sie können auf die Unterschiede hinweisen und darauf, wie sie die von Ihnen festgestellten Mängel beheben.
Shawn Mehan
1
Ich müsste hier alle Entscheidungen durchlaufen. OK. Im Vergleich zu den Funktionen @victorkohl und @kapa können meine Funktionen tiefer als die erste Ebene gehen und komplexe Objekte melden, die nicht leer aussehen, aber tatsächlich nur aus leeren Werten bestehen. Beispiel : [{},0,""]. Alle anderen Lösungen hier sind lediglich Zweizeiler, die nicht über die Distanz gehen, und eine Unterstrichfunktion, die für Objekte funktioniert und die Bibliothek benötigt.
Oleksii Chekulaiev
4

Hier meine einfachste Lösung.

Inspiriert von der PHP- empty Funktion

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

Prabu Samvel
quelle
3

Siehe http://underscorejs.org/#isEmpty

isEmpty_.isEmpty (Objekt) Gibt true zurück, wenn ein aufzählbares Objekt keine Werte enthält (keine aufzählbaren eigenen Eigenschaften). Für Zeichenfolgen und Array-ähnliche Objekte überprüft _.isEmpty, ob die Eigenschaft length 0 ist.

Lo HaBuyshan
quelle
3

Kombinieren Sie die Antworten von @inkednm zu einer Funktion:

   function isEmpty(property) {
      return (property === null || property === "" || typeof property === "undefined");
   }
Crashalot
quelle
Verwendung property == nullfür kombinierte Überprüfung am nullundundefined
SJ00
3

Die leere Prüfung des Schlüssels eines JSON hängt vom Anwendungsfall ab. Für einen allgemeinen Anwendungsfall können wir Folgendes testen:

  1. Nicht null
  2. Nicht undefined
  3. Kein leerer String ''
  4. Kein leeres Objekt {} [] (Array ist ein Objekt)

Funktion:

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

Rückgabe true für:

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

Setzen Sie die Variable einfach in die if-Bedingung. Wenn die Variable einen Wert hat, wird true zurückgegeben, andernfalls false.

if (response.photo){ // if you are checking for string use this if(response.photo == "") condition
 alert("Has Value");
}
else
{
 alert("No Value");
};
Deepak MS
quelle
Dies setzt voraus, dass 'leer' null bedeutet ... aber aus der Frage des Fragestellers geht nicht hervor, dass dies das ist, was sie gemeint haben. Es ist wahrscheinlich besser, dies zuerst zu klären, bevor Sie eine Antwort anbieten, oder sie zumindest als Annahme in Ihrer Antwort anzugeben.
Mir
1

Was ist damit?

JSON.stringify({}) === "{}"

Tibin Thomas
quelle
0

Es kommt darauf an, was Sie unter "leer" verstehen. Das häufigste Muster besteht darin, zu überprüfen, ob die Variable undefiniert ist . Viele Leute machen auch eine Nullprüfung, zum Beispiel:
if (myVariable === undefined || myVariable === null)...

oder in kürzerer Form:
if (myVariable || myVariable === null)...

Bobby D.
quelle
Verwenden Sie nicht die undefined"Konstante", da sie überhaupt keine Konstante ist. Verwenden Sie typeof myVar === 'undefined'stattdessen.
Guffa
Diese beiden Formen sind überhaupt nicht gleich.
Kapa
Es gibt zwar einen undefinierten Typ, aber um den Standard zu zitieren: Eine Referenz ist eine aufgelöste Namensbindung. Eine Referenz besteht aus drei Komponenten, dem Basiswert, dem referenzierten Namen und dem strengen Referenzflag mit Booleschem Wert. Der Basiswert ist entweder undefiniert, ein Objekt, ein Boolescher Wert, ein String, eine Zahl oder ein Umgebungsdatensatz (10.2.1). Ein Basiswert von undefined zeigt an, dass die Referenz nicht in eine Bindung aufgelöst werden konnte.
Bobby D
0
if (myVar == undefined)

wird funktionieren, um zu sehen, ob die Variable deklariert, aber nicht initialisiert ist.

Franz Payer
quelle
1
Dies ist gefährlich, da undefinedes im Code neu definiert werden kann (dh undefined = truegültig ist).
Tomalak
Verwenden Sie nicht die undefined"Konstante", da sie überhaupt keine Konstante ist. Verwenden Sie typeof myVar === 'undefined'stattdessen.
Guffa
0

Auf undefiniert prüfen:

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

Dies würde das Äquivalent von vb's tun IsEmpty. Wenn myvar einen Wert enthält, sogar null, eine leere Zeichenfolge oder 0, ist er nicht "leer".

Um zu überprüfen, ob eine Variable oder Eigenschaft vorhanden ist, z. B. deklariert wurde, obwohl sie möglicherweise nicht definiert wurde, können Sie den inOperator verwenden.

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

Wenn Sie nach dem Äquivalent der PHP- emptyFunktion suchen , lesen Sie Folgendes:

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

Kapa
quelle
0

Was fehlt mir, wenn das Array leer ist ... schlüsselloses Objekt ... Falschheit const isEmpty = o => Array.isArray (o) &&! o.join (''). length || typeof o === 'object' &&! Object.keys (o) .length || ! (+ Wert);

PDA
quelle
0

Hier ist eine einfachere (kurze) Lösung, um nach leeren Variablen zu suchen. Diese Funktion prüft, ob eine Variable leer ist. Die angegebene Variable kann gemischte Werte enthalten (null, undefiniert, Array, Objekt, Zeichenfolge, Ganzzahl, Funktion).

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
quelle
Seltsam ... Ich habe diese Lösung noch nicht online gesehen, aber die Verwendung des "!" sollte darauf achten, die meisten Werte zu überprüfen
J Carrillo
0

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

ismael oliva
quelle
Ich verstehe nicht, der Benutzer hat gefragt, wie in Javascript nach Leerzeichen gesucht werden soll. Ich gehe also davon aus, dass der Benutzer Javascript kennt und meine Antwort nicht erklären muss, wenn die Syntax bekannt ist.
Ismael Olivia
Ein paar weitere Wörter der Beschreibung
hinzuzufügen
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
}

Ziarno
quelle