2014-05-22 5 views

Antwort

5

In AgularJS spezifische Begriffe:

$ viewValue

Tatsächlicher Zeichenfolgenwert in der Ansicht.

$ modelValue

Der Wert in dem Modell, dass das Steuerelement gebunden ist.

Also, wenn Sie eine Eingabe haben, ist der Wert in Form einer Zeichenfolge. Wenn Sie den Modellwert oder interpolierten Wert als Markup, {{ myInt }} oder {{ 5 + 5 }} anzeigen, wird er als Zeichenfolge angezeigt.

Dies ist, weil HTML eine Sprache des Textes ist, während JS eine Sprache der Funktionen und Werte ist. Um diesen Doppelmodus für die Doppelbindung zu handhaben, verwendet AngularJS den $ viewValue-Dienst für den "Anzeige" -Wert eines Modellfelds und verwendet den Wert $modelValue, um den "tatsächlichen" Wert zu verfolgen.

Der "Anzeige" -Wert sollte niemals "undefiniert" sein, da die Interpolation eines nicht definierten Modells keinen Fehler verursachen sollte. und der Wert "display" sollte niemals eine Zahl sein. Bevor es also eine formale Zeichenkette ist (Interpolation von $modelValue), ist es eine NaN.

2

Meine Vermutung wäre, dass sie Nan verwenden, weil nach Section 4.3.23 of ECMAScript Language Specification NaN wie folgt definiert ist:

number value that is a IEEE 754 “Not-a-Number” value 

So ist es eine Zahl und nicht etwas undefiniert oder null. Der Wert wird weiter erläutert in Section 8.3

Gleichheit Vergleiche mit NaN in Section 11.9.3 definiert:

The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows: If Type(x) is Number, then: 

If x is NaN, return false. 

If y is NaN, return false. 

So Für die Zwecke des Vergleichs isNaN() sollte stattdessen verwendet werden:

isNaN(NaN) 
// true