String.IsNullOrEmpty in JavaScript

120560
Terrance

I am aware of it being frowned upon to do something like write C# in JavaScript. (see this if you don't know what I'm talking about)

But as a judgement call, I think we could stand to have a relatively simple check for values that are null or empty, so I'm looking for feedback on this implementation of String.isNullOrEmpty.

String.isNullOrEmpty = function (value) {
    return (!value || value == undefined || value == "" || value.length == 0);
}
Antworten
32
Sind die ersten Überprüfungen nicht überflüssig, nachdem Sie bereits versucht haben, "toString" zu "value" aufzurufen? user786653 vor 9 Jahren 1
Möglicherweise ... Ich habe mir gedacht, ob ich String.isNullOrEmpty () "static" nennen würde. Nicht sicher, ob ich es brauche. Terrance vor 9 Jahren 0
Diese Überarbeitung ist nicht gut, siehe [this] (http://stackoverflow.com/questions/2703102/typeof-undefined-vs-null) und anderen Beiträgen. Sie haben die Bedeutung der Funktion grundlegend geändert. user786653 vor 9 Jahren 0
Dir nicht bei diesem zweiten Kommentar folgen. "Sie haben die Bedeutung der Funktion radikal geändert" Ich habe gerade den ersten Versuch entfernt, fangen. Ich habe keine Vergleichsoperatoren geändert. Vielleicht sollten Sie mir Ihre Gedanken in einer vollständigen Antwortform geben. Terrance vor 9 Jahren 0
Wenn ich darüber nachdenke. Da ich es als solches verwenden werde, wäre es besser, wenn (String.isNullOrEmpty (51354.toString ())) {} oder das isNullOrEmpty-Casting übernehmen soll Terrance vor 9 Jahren 0
Ich bin nicht wirklich eine maßgebliche Quelle für Javascript, ich habe nur versucht, im Allgemeinen einen Kommentar abzugeben :) Ich werde morgen versuchen, etwas aufzuschreiben, es sei denn, jemand anderes kennt sich aus. Was ich mit meinem Kommentar meinte, war, dass Ihre zwei Versionen unterschiedliche Antworten für etwas wie "0" oder "false" und undefinierte Variablen zurückgeben. user786653 vor 9 Jahren 0
Würde ein Rückgabewert nicht ausreichen? James Khoury vor 9 Jahren 3
@Terrance bitte nimm dieses C # weg. `! string` ist das, was Sie wollen,` String.isNullOrEmpty (string) `ist ein Greuel Raynos vor 9 Jahren 0
@Raynos Bitte erarbeiten. Wie meinst du? (Wie würde! String nach leeren Zeichenfolgen suchen und wie ist String.isNullOrEmpty () ein Greuel für zwei) Was ist Abstraktion oder Leistung oder was? Terrance vor 9 Jahren 0
@Terrance `!" "=== true` und`! Null == true` und `String.isNullOrEmpty` ist nur aufgebläht und existiert zu keinem anderen Zweck als" C # macht es, es muss das Beste sein " Raynos vor 9 Jahren 0
@Raynos Wenn Sie sich besser fühlen, kann ich den Namen der Methode ändern. Ich brauchte nur etwas, das sicherstellt, dass alle Prüfungen im Umgang mit der String-Validierung durchgeführt werden. Und da wir ein Microsoft-Geschäft sind, scheint es am sinnvollsten, etwas zu verwenden, das als vertrautes Konstrukt angesehen wird. Es könnte mich weniger interessieren, dass es eine ".NET" -Sache ist. Solange die Codebasis nicht if (val.length == 0) hat, manchmal und zu anderen Zeitpunkten (val! = Undefined && val! = Null && val! = "") Andere Male. Wir könnten es als "Nein" oder "Nichts" bezeichnen, wenn es seine Verwendung sicherstellt. Terrance vor 9 Jahren 0
@Terrance Ich sage was falsch ist mit if (! Val) {`anstelle von` if (val === "" || val === null) {` Raynos vor 9 Jahren 0

5 Antworten auf die Frage

66
ndp

Beginnen mit:

return (!value || value == undefined || value == "" || value.length == 0);

Betrachtet man die letzte Bedingung, ist der Wert == "" die Länge MÜSSEN 0. Daher lassen Sie ihn fallen:

return (!value || value == undefined || value == "");

Aber warte! In JS ist eine leere Zeichenfolge falsch. Daher fallen value == "":

return (!value || value == undefined);

Und !undefinedist wahr, so dass eine Überprüfung nicht erforderlich ist. Also haben wir:

return (!value);

Und wir brauchen keine Klammern:

return !value

QED

Ich muss sagen ... Bravo Hexxagonal vor 9 Jahren 2
@ndp Muss es dir geben. Das war komplett und prägnant. Nett. Terrance vor 9 Jahren 0
@ndp, großartige Antwort! Es ist ein wenig verwirrend für einen Moment ... Bitte fügen Sie Ihrer Antwort eine Schlussfolgerung hinzu, die besagt, dass es sich um die endgültige Lösung handelt. Shimmy vor 5 Jahren 0
Eine wirklich tolle Antwort ndp! Ich habe in einer Antwort einen Screenshot hinzugefügt, der zeigt, dass es überprüft wird und die Ausführung für diejenigen zeigt, die es nicht sofort bekommen. var A; var B = null; var C = "test"; console.log ("ist A nullOrEmpty% o",! A); console.log ("ist B nullOrEmpty% o",! B); console.log ("ist C nullOrEmpty% o",! C); Paul Gorbas vor 2 Jahren 0
11
Peter Olson

Ich würde nur ein paar Überarbeitungen machen.

Verwenden Sie zuerst immer=== statt ==in Javascript. Mehr darüber erfahren Sie unter Stack Overflow .

Zweitens, da undefinedveränderlich ist, würde ich empfehlen

typeof value === "undefined"

anstatt

value === undefined

Drittens würde ich die !valueund value === ""Bedingungen entfernen . Sie sind überflüssig.

Meine Revision

Ich würde einen etwas anderen Ansatz als Sie verwenden:

String.isNullOrEmpty = function(value) {
  return !(typeof value === "string" && value.length > 0);
}

Dies prüft, ob der Wertetyp "string"(und somit nicht null und nicht undefiniert) ist und ob er nicht leer ist. Wenn ja, ist es nicht null oder leer.

Beachten Sie, dass dies truefür Nicht-String-Eingaben zurückgegeben wird. Dies ist möglicherweise nicht das, was Sie möchten, wenn Sie einen Fehler für einen unerwarteten Eingabetyp ausgeben möchten.

3
Ryan Zielke

Sie sollten verwenden Object.prototype.isNullOrEmpty = function() { alert(this) }. Dies verbindet es in allen Fällen mit dem String-Objekt. Dadurch können Sie Strings und Variablen wie "".isNullOrEmptyoder verwendenvar x = null; x.isNullOrEmpty();

Wenn Sie beabsichtigen, es als Funktion zum Übergeben von Variablen zu verwenden: String.isNullOrEmpty();

Nur einige Leute mögen es nicht, die nativen Prototypen zu erweitern. Peter Olson vor 9 Jahren 1
Außerdem funktioniert das Beispiel mit "null" nicht. Michal Leszczyk vor 5 Jahren 2
3
stevematdavies

Ryan und Seand sind genau richtig: Damit ist dein Ende erreicht.

Object.prototype.isNullOrEmpty = function(value){
    return (!value);
}

Das liebe ich an JavaScript !

3
200_success

Ihre Funktion wird unerwartet truefür die folgenden Nicht-String-Werte zurückgegeben:

  • false
  • 0
  • Number.NaN
  • [[]]
  • []

Es ist durchaus möglich, dass dies, !valueobwohl es ähnlich schlampig ist, ausreicht. In diesem Fall müssten Sie diese Funktion überhaupt nicht definieren. Wenn Sie jedoch eine Funktion mit dem Namen erstellen isNullOrEmpty, sollte dies genau das tun.

function String.isNullOrEmpty(value) {
    return value == null || value === "";
}

Beachten Sie, dass dies value == nulleine Abkürzung für value === null || value === undefined.

Das ist sauber. Zwang anzuwenden ist nicht böse, wie viele vermuten lassen. Solange Sie erkennen, dass Sie es tun und wie und warum es funktioniert. Joe Johnston vor 2 Jahren 0