Gibt es eine Standardfunktion, um in JavaScript nach null, undefinierten oder leeren Variablen zu suchen?

Lesezeit: 7 Minuten

Gibt es eine Standardfunktion um in JavaScript nach null undefinierten
Alex

Gibt es eine universelle JavaScript-Funktion, die überprüft, ob eine Variable einen Wert hat, und sicherstellt, dass dies nicht der Fall ist? undefined oder null? Ich habe diesen Code, aber ich bin mir nicht sicher, ob er alle Fälle abdeckt:

function isEmpty(val){
    return (val === undefined || val == null || val.length <= 0) ? true : false;
}

  • mögliches Duplikat von Wie suchen Sie in JavaScript nach einer leeren Zeichenfolge?

    – Mürrischer hoher Bogen

    10. Juni 2013 um 19:40 Uhr

  • Protip, niemals (truthy statement) ? true : false;. Mach einfach (truthy statement);.

    – David Baukum

    2. August 2017 um 17:55 Uhr


  • @GeorgeJempty kein Dup, da die andere Antwort danach fragt Saiten insbesondere, während dieser hier nach fragt Variablen.

    – Madbreaks

    1. Februar 2018 um 0:55 Uhr

  • Jede richtige Antwort auf diese Frage hängt ganz davon ab, wie Sie “leer” definieren.

    – Madbreaks

    1. Februar 2018 um 1:03 Uhr

  • @Jay Es tut nichts weh, was die Ausführung Ihres Codes angeht. Es ist einfach zu ausführlich. Du würdest nicht sagen: “Ist es wahr, bist du hungrig?” Du sagst einfach “Bist du hungrig” also im Code einfach if (hungry) … anstatt if (hungry === true) …. Wie alle Dinge auf diese Weise zu codieren, ist es nur eine Frage des Geschmacks. Spezifischer zu dem vom OP bereitgestellten Beispiel sagt er noch ausführlicher: “Wenn es wahr ist, dann wahr, wenn nicht, dann falsch.” Aber wenn es wahr ist, dann ist es bereits wahr. Und wenn es falsch ist, ist es bereits falsch. Das ist so, als würde man sagen: „Wenn du Hunger hast, dann bist du es, und wenn nicht, dann nicht.“

    – David Baukum

    30. Januar 2019 um 22:58 Uhr

1646637912 979 Gibt es eine Standardfunktion um in JavaScript nach null undefinierten
Salmann A

Die ausführliche Methode zum Überprüfen, ob der Wert undefiniert oder null ist, lautet:

return value === undefined || value === null;

Sie können auch die verwenden == Operator, aber dies erwartet man zu alle Regeln kennen:

return value == null; // also returns true if value is undefined

  • Nur prüfen null oder undefined kann so gemacht werden: if (value == null). Pass auf == Betreiber, der zwingt. Wenn Sie so prüfen if (value === null || value === undefined)Sie haben vergessen / wissen nicht, wie Javascript erzwingt. webreflection.blogspot.nl/2010/10/…

    – Christiaan Westerbeek

    3. Juli 2014 um 11:46 Uhr


  • @ChristiaanWesterbeek: Ihr Punkt das arg == null liefert die gleichen Ergebnisse wie arg === undefined || arg === null. Ich halte jedoch das letztere Beispiel für lesbarer.

    – Salmann A

    7. Juli 2014 um 4:02 Uhr

  • arg == null ist meiner Erfahrung nach ziemlich häufig.

    – Bryan Downing

    10. Oktober 2014 um 1:56 Uhr

  • return value === (void 0) ist sicherer als zu testen undefined was leider eine legitime Variable im Umfang sein kann.

    – x0n

    19. Januar 2016 um 5:09 Uhr

  • @Sharky Es gibt einen Unterschied zwischen einer undefinierten und einer nicht deklarierten Variablen: lucybain.com/blog/2014/null-undefined-undeclared

    – Christiaan Westerbeek

    17. Oktober 2016 um 10:22 Uhr

  • undefined == null aber undefined !== null

    – Ian Boyd

    22. Februar 2014 um 15:06 Uhr

  • @IanBoyd das liegt daran, dass Sie == mit === vergleichen. das bedeutet, dass undefined == null (true) undefined != null (false) undefined === null (false) undefined !== null(true) wäre besser, ein bisschen mehr Informationen zu geben, um hilfreich zu sein und Leute zu pushen in die richtige Richtung. moz doc über den Unterschied developer.mozilla.org/en-US/docs/Web/JavaScript/…

    – Corey Jung

    14. Januar 2016 um 18:03 Uhr


1646637912 891 Gibt es eine Standardfunktion um in JavaScript nach null undefinierten
Kerl

Dies ist die sicherste Überprüfung und ich habe sie hier nicht genau so gepostet gesehen:

if (typeof value !== 'undefined' && value) {
    //deal with value'
};

Es wird Fälle abdecken, in denen Wert wurde nie definiert, und auch eine von diesen:

  • Null
  • undefiniert (Wert von undefiniert ist nicht dasselbe wie ein Parameter, der nie definiert wurde)
  • 0
  • “” (leerer String)
  • falsch
  • NaN

Bearbeitet: Auf strikte Gleichheit geändert (!==), weil es inzwischen die Norm ist;)

  • Ich habe nicht abgelehnt, aber in Bezug auf den strengen Gleichheitsvergleich lautet die allgemeine Regel, es sei denn, Sie brauchen Implizite Typkonvertierung als strenger Vergleich verwendet werden sollte.

    – J. Steve

    4. Dezember 2013 um 8:45 Uhr

  • Danke für deinen Kommentar Steve. Diese allgemeine Regel ist in Ordnung. Ich erwarte nur, dass die Leute verstehen, warum sie das eine oder andere verwenden. Wie auch immer Sie aussehen, ppl wird Ihnen gerne “immer und immer streng” predigen – als wäre es das Wichtigste in Javascript. Ich habe zu viele Fälle wie gesehen if(val !== null) die offensichtlich zu einem unerwünschten Ergebnis führen. Es ist in Ordnung, das im Zweifelsfall zu sagen – verwenden Sie strikt, aber es ist besser, keine Zweifel zu haben.

    – Kerla

    7. Dezember 2013 um 22:11 Uhr


  • Ich denke, der Punkt hier ist, dass wir das erwarten typeof -Operator, um eine Zeichenfolge zurückzugeben, sodass die Verwendung der strengen Gleichheitsprüfung technisch genauer, spezifischer und schneller ist. Es gibt also wirklich keinen Grund, den losen Vergleich zu verwenden, nicht umgekehrt. Ebenfalls val !== null ist in vielen Fällen vollkommen gültig – ich mache es die ganze Zeit. Ich stimme Ihrem Argument der Nichtkonformität zu, aber ich denke, dies ist ein schlechtes Beispiel, um es zu machen. Ich versuche nicht, dich zu trollen.

    – Bryan Downing

    10. Oktober 2014 um 2:10 Uhr

  • @guya Das verdient eine Stimme einfach für die Bearbeitung nach 7 Jahren! Vor allem angesichts der obigen Diskussion damals 😉 Hut ab, Sir!

    – rmcsharry

    1. Dezember 2020 um 23:31 Uhr

  • Ich denke, das ist der am besten lesbare Code. Unter allen Antworten sollte dies die akzeptierte sein.

    – Lucio Crusca

    6. Juli 2021 um 11:17 Uhr

Vielleicht finden Sie die folgende Funktion nützlich:

function typeOf(obj) {
  return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}

Oder in ES7 (Kommentar bei weiteren Verbesserungen)

function typeOf(obj) {
  const { toString } = Object.prototype;
  const stringified = obj::toString();
  const type = stringified.split(' ')[1].slice(0, -1);

  return type.toLowerCase();
}

Ergebnisse:

typeOf(); //undefined
typeOf(null); //null
typeOf(NaN); //number
typeOf(5); //number
typeOf({}); //object
typeOf([]); //array
typeOf(''); //string
typeOf(function () {}); //function
typeOf(/a/) //regexp
typeOf(new Date()) //date
typeOf(new WeakMap()) //weakmap
typeOf(new Map()) //map

„Beachten Sie, dass der Bindungsoperator (::) weder Teil von ES2016 (ES7) noch einer späteren Ausgabe des ECMAScript-Standards ist. Es ist derzeit ein Vorschlag der Stufe 0 (Strohmann), um in die Sprache eingeführt zu werden.“ – Simon Kjellberg. Der Autor möchte seine Unterstützung für diesen schönen Vorschlag hinzufügen, die königliche Himmelfahrt zu erhalten.

  • Ich habe nicht abgelehnt, aber in Bezug auf den strengen Gleichheitsvergleich lautet die allgemeine Regel, es sei denn, Sie brauchen Implizite Typkonvertierung als strenger Vergleich verwendet werden sollte.

    – J. Steve

    4. Dezember 2013 um 8:45 Uhr

  • Danke für deinen Kommentar Steve. Diese allgemeine Regel ist in Ordnung. Ich erwarte nur, dass die Leute verstehen, warum sie das eine oder andere verwenden. Wie auch immer Sie aussehen, ppl wird Ihnen gerne “immer und immer streng” predigen – als wäre es das Wichtigste in Javascript. Ich habe zu viele Fälle wie gesehen if(val !== null) die offensichtlich zu einem unerwünschten Ergebnis führen. Es ist in Ordnung, das im Zweifelsfall zu sagen – verwenden Sie strikt, aber es ist besser, keine Zweifel zu haben.

    – Kerla

    7. Dezember 2013 um 22:11 Uhr


  • Ich denke, der Punkt hier ist, dass wir das erwarten typeof -Operator, um eine Zeichenfolge zurückzugeben, sodass die Verwendung der strengen Gleichheitsprüfung technisch genauer, spezifischer und schneller ist. Es gibt also wirklich keinen Grund, den losen Vergleich zu verwenden, nicht umgekehrt. Ebenfalls val !== null ist in vielen Fällen vollkommen gültig – ich mache es die ganze Zeit. Ich stimme Ihrem Argument der Nichtkonformität zu, aber ich denke, dies ist ein schlechtes Beispiel, um es zu machen. Ich versuche nicht, dich zu trollen.

    – Bryan Downing

    10. Oktober 2014 um 2:10 Uhr

  • @guya Das verdient eine Stimme einfach für die Bearbeitung nach 7 Jahren! Vor allem angesichts der obigen Diskussion damals 😉 Hut ab, Sir!

    – rmcsharry

    1. Dezember 2020 um 23:31 Uhr

  • Ich denke, das ist der am besten lesbare Code. Unter allen Antworten sollte dies die akzeptierte sein.

    – Lucio Crusca

    6. Juli 2021 um 11:17 Uhr

1646637913 253 Gibt es eine Standardfunktion um in JavaScript nach null undefinierten
krupar

Die erste Antwort mit der besten Bewertung ist falsch. Wenn der Wert nicht definiert ist, wird in modernen Browsern eine Ausnahme ausgelöst. Sie müssen verwenden:

if (typeof(value) !== "undefined" && value)

oder

if (typeof value  !== "undefined" && value)

  • eee … Ich denke, das ist falsch, da if(value) ausreichend ist (außer leere Objekte / Arrays). Wenn der Wert ‘undefiniert’ ist, wird die ‘if’-Kondition nicht bestanden.

    – Oskar Szura

    15. Oktober 2014 um 14:09 Uhr

  • Dadurch werden nicht definierte Variablen zusammengeführt (die bei der Auswertung einen ReferenceError auslösen), die sich von Variablen mit der unterscheiden undefined Wert.

    – Qantas 94 Schwer

    16. Januar 2015 um 14:04 Uhr


  • Ich habe hier den gleichen Fehler. if(x), if(!x), if(!!x) lösen alle einen Fehler aus, wenn x nicht definiert ist.

    – schaos

    6. Juni 2015 um 0:51 Uhr

  • if(value === 0) gameOver(); 😉

    – Madbreaks

    1. Februar 2018 um 0:53 Uhr

  • Diese Antwort ist auch falsch, weil sie false zurückgibt, wenn value ist null, was ist nicht was op sucht.

    – Madbreaks

    1. Februar 2018 um 1:02 Uhr

963950cookie-checkGibt es eine Standardfunktion, um in JavaScript nach null, undefinierten oder leeren Variablen zu suchen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy