Tenía curiosidad sobre el $scope.$eval que a menudo ves en las directivas, así que revisé la fuente y encontré lo siguiente en rootScope.js:
$eval: function(expr, locals) {
return $parse(expr)(this, locals);
},
$parseparece estar definido por ParseProviderin parse.js, que parece definir algún tipo de mini-sintaxis propia (el archivo tiene 900 líneas de largo).
Mis preguntas son:
Que es exactamente
$evalhaciendo ? ¿Por qué necesita su propio lenguaje de análisis mini?¿Por qué no
evalse usa JavaScript antiguo ?

$parsees increíblemente genial.Respuestas:
$evaly$parseno evalúes JavaScript; evalúan expresiones AngularJS . La documentación vinculada explica las diferencias entre expresiones y JavaScript.P: ¿Qué está haciendo exactamente $ eval? ¿Por qué necesita su propio lenguaje de análisis mini?
De los documentos:
Es un minilenguaje similar a JavaScript que limita lo que puede ejecutar (por ejemplo, sin sentencias de flujo de control, excepto el operador ternario), así como agrega algo de bondad AngularJS (por ejemplo, filtros).
P: ¿Por qué no se usa javascript "eval"?
Porque en realidad no está evaluando JavaScript. Como dicen los documentos:
Los documentos vinculados a arriba tienen mucha más información.
fuente
$evalno evalúa JavaScript; evalúa expresiones AngularJS, que son como un subconjunto más seguro de JavaScript."{id: 'val'}"es una expresión AngularJS válida y debe devolver un objeto JS válido. Vea el enlace de arriba para ver la diferencia entre expresiones y JS regular.De la prueba,
También podemos pasar locales para la expresión de evaluación.
fuente
Creo que una de las preguntas originales aquí no fue respondida. Creo que vanilla eval () no se usa porque las aplicaciones angulares no funcionarían como aplicaciones de Chrome, lo que impide explícitamente que eval () se use por razones de seguridad.
fuente