2014-05-22 12 views

risposta

5

In termini specifici di AgularJS:

$ viewValue

Valore stringa effettivo nella vista.

$ modelValue

Il valore nel modello, che il controllo è associato a.

Quindi, se si dispone di un input, il valore al suo interno è sotto forma di stringa. Se si visualizza il valore del modello o il valore interpolato come markup, {{ myInt }} o {{ 5 + 5 }}, verrà visualizzato come stringa.

Questo perché HTML è una lingua di testo, mentre JS è un linguaggio di funzioni e valori. Pertanto, per gestire questa doppia modalità per il doppio binding, AngularJS utilizza il servizio $ viewValue per il valore di "visualizzazione" di un campo modello e utilizza lo $modelValue per tracciare il valore "effettivo".

Il valore "display" non deve mai essere "indefinito", in quanto l'interpolazione di un modello non definito non deve generare un errore. e il valore "display" non dovrebbe mai essere un numero. Quindi, prima che sia una stringa formale (interpolazione di $modelValue), è un NaN.

2

La mia ipotesi è che usano Nan perché, secondo Section 4.3.23 of ECMAScript Language Specification NaN è definito come:

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

Quindi è un numero e non qualcosa di indefinito o nullo. Il valore è spiegato ulteriormente nel Section 8.3

confronti di uguaglianza con NaN sono definiti in Section 11.9.3:

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. 

Quindi Ai fini del confronto, isNaN() dovrebbe essere utilizzato al posto:

isNaN(NaN) 
// true