Was sind die truthy und falsy Werte in AngularJS?

9

Ich denke, dass es im Kontext von ng-show oder ng-class berücksichtigt wird? Gibt es andere Situationen? Es scheint, dass truthy und falsy sich von reinem JavaScript leicht unterscheiden - aber die einzige Ausnahme, die ich bisher kenne, ist [] - was in JavaScript truthy ist, aber in AngularJS falsy.

(Ich habe tatsächlich versucht, AngularJS 1.2.1 zu verwenden und [] ist falsch, während AngularJS 1.4.8 und 1.5.0 [] truthy ist. Siehe Ссылка , Ссылка , und Ссылка )

Ich denke, es hat einen Haken, den man denken könnte ng-show="ctrl.foo" ist gleich wie ng-hide="!ctrl.foo" , aber im Fall von Angular 1.2.1 ist es nicht. Um das identische Ergebnis von reinem JavaScript in Angular 1.2.1 zu erhalten, können wir ng-show="!!ctrl.foobar" Ссылка

verwenden

Wenn es in Angular 1.2.1 ng-class ist, dann scheint es so zu sein, dass es auf die reine JS-Truthy- und Falsy-Regel zurückgeht: Ссылка

    
太極者無極而生 03.03.2016, 15:33
quelle

3 Antworten

1

Die folgenden Werte sind immer falsch:

  • falsch
  • 0 (null)
  • "" (leere Zeichenfolge)
  • null
  • undefined
  • NaN (ein spezieller Zahlenwert bedeutet Not-a-Number!)
  

Alle anderen Werte sind truthy, einschließlich "0" (Null in Anführungszeichen), "false"   (false in Anführungszeichen), leere Funktionen, leere Arrays und leere Objekte.

%Vor%

Vergleichen von Falsy-Werten Falsy-Werte folgen einigen leicht ungeraden Vergleichsregeln, die zu Fehlern in der Programmlogik führen können.

Die Falschwerte false, 0 (null) und "" (leere Zeichenfolge) sind alle gleichwertig und können miteinander verglichen werden:

%Vor%

Die Falsy-Werte null und undefined sind nichts anderem als sich selbst:

%Vor%

Schließlich ist der Falsy-Wert NaN zu nichts äquivalent - einschließlich NaN!

%Vor%

Sie sollten sich auch darüber im Klaren sein, dass typeof(NaN) "Zahl" zurückgibt. Glücklicherweise kann die JavaScript-Kernfunktion isNaN() verwendet werden, um auszuwerten, ob ein Wert NaN ist oder nicht.

Im Zweifelsfall ... Verwenden Sie streng gleich (===) und strikt nicht gleich (! ==) in Situationen, in denen truthy oder falsy Werte zu logischen Fehlern führen können. Diese Operatoren stellen sicher, dass die Objekte nach Typ und Wert verglichen werden.

%Vor%     
Prateek Gupta 30.05.2017 10:51
quelle
0

Winkelausdrücke sind wie JavaScript-Ausdrücke mit den folgenden Unterschieden:

Kontext : JavaScript-Ausdrücke werden für das globale Fenster ausgewertet. In Angular werden Ausdrücke für ein Bereichsobjekt ausgewertet.

Vergeben : Wenn Sie in JavaScript versuchen, nicht definierte Eigenschaften zu bewerten, wird ReferenceError oder TypeError generiert. In Angular ist die Ausdruckauswertung gegenüber undefiniert und null verzeihend.

Filter : Sie können Filter in Ausdrücken verwenden, um Daten vor der Anzeige zu formatieren.

Keine Kontrollfluss-Anweisungen : Sie können Folgendes nicht in einem angularen Ausdruck verwenden: Bedingungen, Schleifen oder Ausnahmen.

Keine Funktionserklärungen : Sie können Funktionen in einem Angular-Ausdruck nicht deklarieren, nicht einmal innerhalb der ng-init-Direktive.

Keine RegExp-Erstellung mit literaler Schreibweise : Sie können keine regulären Ausdrücke in einem angularen Ausdruck erstellen.

Keine Objekterstellung mit neuem Operator : Sie können keinen neuen Operator in einem angularen Ausdruck verwenden.

Keine Bitwise-, Komma und Void-Operatoren : Sie können die Operatoren Bitwise,, oder void nicht in einem Angular-Ausdruck verwenden.

Quelle

    
Tiago Bértolo 04.05.2016 23:32
quelle
0

Vor Angular 1.2.7,

  

Ausdrücke, die eine Funktion mit einem oder mehreren ausgewerteten Argumenten waren   true, aber funktioniert mit Null-Argumenten, die zu false ausgewertet werden.

     

Dieses Verhalten scheint sowohl unbeabsichtigt als auch unerwünscht. Dieser Patch hat eine Funktion   truthy unabhängig von der Anzahl der Argumente.

Sie finden den GitHub-Link: Ссылка

    
varit05 07.07.2016 06:45
quelle

Tags und Links