javascript - tutorial - vue js




Perché{{undefined+number}} restituisce il numero? (2)

Sto lavorando a un progetto AngularJS. Ho notato che la seguente espressione restituisce un numero.

Nella vista, {{undefined + 10}} verrà visualizzato 10.

In JavaScript, undefined + 10 genererà NaN .

Perché questo comportamento è diverso in una vista?



Questo è il vantaggio dell'interpolazione.

Il markup dell'interpolazione con espressioni incorporate viene utilizzato da AngularJS per fornire l'associazione dati ai nodi di testo e ai valori degli attributi.

Se il valore interpolato non è una stringa, viene calcolato come segue:

  • undefined e null vengono convertiti in '' (stringa vuota)
  • se il valore è un oggetto che non è un numero, una data o una matrice, $interpolate cerca una funzione toString() personalizzata sull'oggetto e la utilizza.
  • se quanto sopra non si applica, viene usato JSON.stringify .

Durante il runtime, il compilatore utilizza il servizio $interpolate per verificare se i nodi di testo e gli attributi degli elementi contengono il markup di interpolazione con espressioni incorporate.

Inoltre, il compilatore angolare usa un'interpolata interpolateDirective e registra gli osservatori per ascoltare le modifiche del modello. Questo è il processo del ciclo di digestione.

Leggi di più here per capire come funziona l'interpolazione.

Perché {{'' == +Infinity}} restituisce true?

In AngularJS, $interpolate service valuta +Infinity a 0 valore.

angular.module('app', [])

.controller('Controller', ['$injector', function($injector) {

}]);
setTimeout(function() {
  angular.bootstrap(document.getElementById('body'), ['app']);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
<div id="body">
  <div ng-controller="Controller">
    {{+Infinity}}
  </div>
</div>

Ora l'espressione rimane {{0==''}} .

Perché 0=='' viene valutato come true ?

Il lato sinistro è di tipo Number . Il lato destro è di tipo String .

In questo caso, l'operando di destra è forzato al tipo Numero:

0 == Number('') => 0 == 0,

che viene valutato a true valore booleano.

Qui viene applicato l'Algoritmo di confronto dell'uguaglianza astratta .

Se Type (x) è Number e Type (y) è String, restituisce il risultato del confronto x == ToNumber (y).





angularjs