Underscore: _.ist leeres Verhalten bei Zahlen

Erstellt am 13. Jan. 2012  ·  13Kommentare  ·  Quelle: jashkenas/underscore

var cow = {a: 1, b: {}, c: []};
_.isEmpty(cow); // returns false

isEmpty funktioniert gut bei Objekten, die Zahlen als einzige 'nicht leere' Werte enthalten

_.isEmpty(cow.a); // returns true

Das Individuum k, v von a: 1 wird jedoch als leer betrachtet.

Ich habe die Probleme durchgelesen und festgestellt, dass _.isEmpty ursprünglich nicht für Zeichenfolgen gedacht war, daher könnte dies beabsichtigt sein. Wenn es nicht beabsichtigt ist, habe ich einen Zweig, für den ich eine Pull-Anfrage stellen kann.

question

Hilfreichster Kommentar

Nun ja. Ich bin froh, dass du gefragt hast :-)

Wie ich gesehen habe, verwenden die meisten Leute _.isEmpty um zu überprüfen, ob einer bestimmten Variablen ein Wert (ein beliebiger Wert) zugewiesen wurde. Ich habe viele Entwickler gesehen, die aus diesem Grund auf Probleme gestoßen sind.

Sogar in der offiziellen Dokumentation heißt es "Gibt true zurück, wenn das Objekt keine Werte enthält" - und eine Zahl sollte als Wert gelten.

Wenn ich eine größere Auswirkung auf diese Änderung habe, die ich einfach nicht sehen kann, wäre mein zweitbester Vorschlag, die Dokumentation zu aktualisieren, um klar zu sagen, dass sie nicht für Zahlen verwendet werden sollte :-)

Alle 13 Kommentare

Der Anwendungsfall, auf den ich gestoßen bin, war so etwas

_.each(cow, function(v, k) {
  if (_.isEmpty(v)) {
    // do something with k because of v being empty
  }
});

Cow.a würde also genauso behandelt wie cow.b und cow.c. Ich kann es umschreiben, dachte aber, es wäre so viel ordentlicher, wenn ich es nicht müsste (und wenn es nicht den Geist oder die Vision des Unterstrichs brechen würde)

Ja, _.isEmpty ist nur für Objekte und Arrays definiert. Sie sollten es nicht für Zeichenfolgen oder Zahlen verwenden.

Welche Alternativen müssen wir für Zahlen verwenden?

@jashkenas oder @michaelficarra : _.isNumber in _.isEmpty nicht aufgerufen wird? (auf die gleiche Weise werden _.isArray und _.isString verwendet)

Gibt es einen Grund, warum es sollte?

Nun ja. Ich bin froh, dass du gefragt hast :-)

Wie ich gesehen habe, verwenden die meisten Leute _.isEmpty um zu überprüfen, ob einer bestimmten Variablen ein Wert (ein beliebiger Wert) zugewiesen wurde. Ich habe viele Entwickler gesehen, die aus diesem Grund auf Probleme gestoßen sind.

Sogar in der offiziellen Dokumentation heißt es "Gibt true zurück, wenn das Objekt keine Werte enthält" - und eine Zahl sollte als Wert gelten.

Wenn ich eine größere Auswirkung auf diese Änderung habe, die ich einfach nicht sehen kann, wäre mein zweitbester Vorschlag, die Dokumentation zu aktualisieren, um klar zu sagen, dass sie nicht für Zahlen verwendet werden sollte :-)

Warum sollten Sie jemals eine Zahl an isEmpty , anstatt nur zu überprüfen, ob die Zahl null ist?

Sogar in der offiziellen Dokumentation heißt es "Gibt true zurück, wenn das Objekt keine Werte enthält".

Ganz richtig. In JavaScript ist eine Zahl (sehr traurig) kein Objekt.

Ich denke, dies könnte mit _.isEmpty doc Tweaks geklärt werden. Was Entwickler suchen, ist _.exists .

Es ist sinnvoll, wenn _.isEmpty(a) bedeutet "Ist a ein leeres Objekt?", Ähnlich wie wenn die Aussage: if obj == {} an Werten und nicht an Referenzen gearbeitet hat. Daher würden Werte wie Zahlen false zurückgeben und null und undefiniert.

Eine Beispielimplementierung von _.isEmpty könnte sein:

_.isEmpty = function(a) {
  return _.isEqual(a, {}) || _.isEqual(a, []) || _.isEqual(a, '');
}

@jashkenas Das liegt wahrscheinlich daran, dass in einigen anderen Sprachen "leer" bestimmt, ob die Variable leer ist oder nicht :) http://www.php.net/manual/en/function.empty.php

+1 bis @josser - hauptsächlich, weil ich einen PHP-Hintergrund habe :-p
Aber ich denke, es könnte auch ausreichen, dies nur in der Dokumentation zu klären. Ich sehe ernsthaft Leute, die jede zweite Woche darauf stoßen.

Ich bin heute darauf gestoßen. Ich habe es mit _.omit verwendet

_.omit(someObject, _.isEmpty);
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

jdalton picture jdalton  ·  4Kommentare

arieljake picture arieljake  ·  4Kommentare

danilopolani picture danilopolani  ·  5Kommentare

Francefire picture Francefire  ·  5Kommentare

haggholm picture haggholm  ·  8Kommentare