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"
Ссылка
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: Ссылка
Die folgenden Werte sind immer falsch:
%Vor%Alle anderen Werte sind truthy, einschließlich "0" (Null in Anführungszeichen), "false" (false in Anführungszeichen), leere Funktionen, leere Arrays und leere Objekte.
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%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.
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: Ссылка
Tags und Links angularjs