Ich habe die eckigen Dokumente durchsucht, als ich auf Folgendes stieß:
Beachten Sie, dass this.$viewValue = Number.NaN;
Nicht nur in diesem Dokument, sondern auch in anderen eckigen Dokumenten.
Was ist der Vorteil / Nachteil, dies auf diese Weise zu tun, anstatt es als undefined
oder null
zu setzen?
In AgularJS spezifischen Begriffen:
$ viewValue
Tatsächlicher Zeichenfolgenwert in der Ansicht.
$ modelValue
Der Wert im Modell, an den das Steuerelement gebunden ist.
Wenn Sie also eine Eingabe haben, hat der darin enthaltene Wert die Form einer Zeichenfolge. Wenn Sie den Modellwert oder interpolierten Wert als Markup anzeigen, {{ myInt }}
oder {{ 5 + 5 }}
, wird er als Zeichenfolge angezeigt.
Dies liegt daran, dass HTML eine Sprache für Text ist, während JS eine Sprache für 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 $modelValue
, um den "tatsächlichen" Wert zu verfolgen.
Der "Anzeige" -Wert sollte niemals "undefiniert" sein, da die Interpolation eines undefinierten Modells keinen Fehler verursachen sollte. und der Wert "display" sollte niemals eine Zahl sein. Bevor es also eine formale Zeichenfolge ist (Interpolation von $modelValue
), ist es ein NaN
.
Ich nehme an, dass sie Nan benutzen, weil Abschnitt 4.3.23 der ECMAScript-Sprachspezifikation NaN ist definiert als:
%Vor%Also ist es eine Zahl und nicht etwas Undefiniertes oder Null. Der Wert wird weiter in Abschnitt 8.3
erläutertGleichheitsvergleiche mit NaN sind in Abschnitt 11.9.3 definiert:
%Vor%So sollte zu Vergleichszwecken isNaN () stattdessen verwendet werden:
%Vor%Tags und Links javascript angularjs nan null undefined