当前位置: 首页 > 面试题库 >

Angular.js:$ eval如何工作,为什么与香草eval不同?

有骏祥
2023-03-14
问题内容

我很好奇$scope.$eval您经常在指令中看到您,因此我检查了源代码并在中找到以下内容rootScope.js

  $eval: function(expr, locals) {
    return $parse(expr)(this, locals);
  },

$parse似乎由ParseProviderin 定义,in parse.js似乎定义了自己的某种微型语法(文件长900行)。

我的问题是:

  1. 到底在$eval做什么?为什么需要自己的小型解析语言?

  2. 为什么不使用普通的旧JavaScript eval


问题答案:

$eval而且$parse不要评估JavaScript;他们评估AngularJS
表达式。链接的文档解释了表达式和JavaScript之间的区别。

问:$ eval到底在做什么? 为什么需要自己的小型解析语言

从文档:

表达式是类似于JavaScript的代码段,通常放置在诸如{{expression}}之类的绑定中。表达式由$ parse服务处理。

这是一种类似于JavaScript的迷你语言,它限制了您可以运行的内容(例如,除了三元运算符之外,没有控制流语句),并且增加了一些AngularJS的优点(例如,过滤器)。

问:为什么不使用普通的旧javascript“ eval”?

因为它实际上不是在评估JavaScript。正如文档所说:

如果您确实想运行任意JavaScript代码,则应将其设为控制器方法并调用该方法。如果要从JavaScript评估角度表达式,请使用$
eval()方法。

上面链接的文档有更多信息。



 类似资料:
  • 问题内容: 据我所知,由于安全性,在JavaScript中使用JSON对象被认为是不好的做法。如果JSON来自其他服务器,我可以理解此问题。 但是,如果JSON是由我自己的服务器提供的,并且是使用PHP创建的(我们假设它不是越野车),那么简单地使用JS中的JSON读取是否合法,或者我目前无法想到任何安全问题? ? 我真的不想处理动态加载JSON解析器的问题,因此很高兴使用。 PS:很明显,我将使用

  • eval 函数会在当前作用域中执行一段 JavaScript 代码字符串。 var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1 但是 eval 只在被直接调用并且调用函数就是 eval 本身时,才在当前作用域中执行。 var fo

  • 我有一个简单的问题,困扰了我几天:什么是香草?有些人把它称为一个框架,你可以从官方页面下载一个库。 但当我检查一些示例或TodoMVC时,它们只是使用经典的raw JavaScript函数,甚至没有包括来自官方页面的库或任何东西。此外,官方网页上的链接“docs”指向JavaScript的Mozilla规范。 我的问题是:VanillaJS是raw JavaScript吗?如果是的话,为什么人们把

  • 问题内容: 在我用Python阅读的书中,它一直在使用代码 我阅读了文档,但我理解了它,但仍然看不到它如何更改功能。 它有什么作用?有人可以解释吗? 问题答案: eval函数允许Python程序在其内部运行Python代码。 评估示例(交互式shell):

  • 问题内容: 我的Spider Sense警告我,使用解析传入的JSON是一个坏主意。我只是想知道-我假设它是JavaScript的一部分而不是浏览器特定的功能- 是否更安全。 问题答案: *如果使用, *您将更容易受到攻击:JSON是Javascript的子集,而json.parse仅解析JSON,而这却为所有JS表达式敞开了大门。

  • 本文向大家介绍eval是做什么的?相关面试题,主要包含被问及eval是做什么的?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 它的功能是将对应的字符串解析成js并执行,应该避免使用js,因为非常消耗性能(2次,一次解析成js,一次执行)