Ответ 1
Это преимущество интерполяции.
Разметка интерполяции с встроенными выражениями используется AngularJS для обеспечения привязки данных к текстовым узлам и значениям атрибутов.
Если интерполированное значение не является строкой, оно вычисляется следующим образом:
- undefined и null преобразуются в '' (пустая строка)
- Если значение является объектом, который не является числом, датой или массивом,
$interpolate
ищет пользовательскую функциюtoString()
для объекта и использует это. - Если вышеуказанное не применяется, используется
JSON.stringify
.
В процессе выполнения компилятор использует службу $interpolate
, чтобы увидеть, содержат ли текстовые узлы и атрибуты элементов интерполяционную разметку встроенные выражения.
Кроме того, компилятор angular использует interpolateDirective
и регистрирует наблюдателей, чтобы прослушивать изменения модели. Это процесс цикла дайджест.
Подробнее здесь, чтобы понять, как работает интерполяция.
Почему
{{'' == +Infinity}}
возвращает true?
В angularJS служба $interpolate
оценивает значение +Infinity
до 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>