javascript - error - validar undefined jquery
¿Por qué{{undefined+number}} devuelve el número? (2)
Esa es la ventaja de la interpolación.
AngularJS utiliza el marcado de interpolación con expresiones incrustadas para proporcionar enlace de datos a nodos de texto y valores de atributo.
Si el valor interpolado no es una cadena, se calcula de la siguiente manera:
- undefined y null se convierten a '''' (cadena vacía)
- Si el valor es un objeto que no es un Número, Fecha o Arreglo,
$interpolate
busca una funcióntoString()
en el objeto, y la utiliza. - Si no se aplica lo anterior, se utiliza
JSON.stringify
.
Durante el tiempo de ejecución, el compilador usa el servicio $interpolate
para ver si los nodos de texto y los atributos de los elementos contienen marcas de interpolación con expresiones incrustadas.
Además, el compilador angular utiliza un interpolateDirective
y registra a los observadores para escuchar los cambios del modelo. Ese es el proceso del ciclo digestivo.
Lea más here para comprender cómo funciona la interpolación.
¿Por qué
{{'''' == +Infinity}}
devuelve verdadero?
En AngularJS, el servicio $interpolate
evalúa +Infinity
valor +Infinity
a 0
.
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>
Ahora la expresión permanece {{0==''''}}
.
¿Por qué 0==''''
se evalúa como true
?
El lado izquierdo es de tipo Number
. El lado derecho es de tipo String
.
En este caso, el operando derecho se obliga al tipo Número:
0 == Number('''') => 0 == 0,
que se evalúa a valor booleano true
.
Aquí se aplica el algoritmo de comparación de igualdad abstracta .
Si el Tipo (x) es Número y el Tipo (y) es Cadena, devuelva el resultado de la comparación x == ToNumber (y).
Estoy trabajando en un proyecto AngularJS. Noté que la siguiente expresión devuelve un número.
En la vista, {{undefined + 10}}
generará 10.
En JavaScript, undefined + 10
emitirá NaN .
¿Por qué este comportamiento es diferente en una vista?
Para explicar haciendo referencia al código de AngularJS, esta es la magia:
function plusFn(l, r) {
if (typeof l === ''undefined'') return r;
if (typeof r === ''undefined'') return l;
return l + r;
}
Si tiene una expresión "más", esta función se analiza en su plantilla.
El reemplazo de la expresión es invocado por Parser.parse (angular.js: 16155) o parse.js: 1646 ( https://github.com/angular/angular.js/blob/87a586eb9a23cfd0d0bb681cc778b4b8e5c8451d/src/ng/parse.js#L1646 cppp / cpp / cpcp / cp7pc) https://github.com/angular/angular.js/blob/87a586eb9a23cfd0d0bb681cc778b4b8e5c8451d/src/ng/parse.js#L1646 ).