Ü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.


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

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

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

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

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


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.


3

Kombinieren Sie die Antworten von @inkednm zu einer Funktion:

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

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

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

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


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


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.


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
}

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


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


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

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;


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
}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.