标签: eval

执行使用JavaScript eval()创建的匿名函数

我有一个函数及其内容作为字符串.

var funcStr = "function() { alert('hello'); }";
Run Code Online (Sandbox Code Playgroud)

现在,我做一个eval()来实际在变量中获取该函数.

var func = eval(funcStr);
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,在Chrome和Opera中,只需拨打电话即可

func();
Run Code Online (Sandbox Code Playgroud)

调用该函数并显示警报.

但是,在其他浏览器中并非如此.没啥事儿.

我不想争论哪种方法是正确的,但我怎么能这样做呢?我希望能够调用variable(); 执行存储在该变量中的函数.

javascript eval

17
推荐指数
4
解决办法
2万
查看次数

如何在代码隐藏中调用Eval?

如何从代码隐藏中调用Eval()?我知道这是像DataBinder.Eval(Container.DataItem,"name")之类的东西的前端快捷方式,但我无法编译这个该死的东西.我想,我错过了正确的方法参数.我想转这样的事情:

<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# Eval("name") %>'/>
Run Code Online (Sandbox Code Playgroud)

成:

<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# GetImagePath(???) %>'/>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

protected string GetImagePath(????)
{
    //some code
    return "some/logical/path" + Eval("name");
}
Run Code Online (Sandbox Code Playgroud)

asp:Image控件位于一个绑定到SqlDataReader的转发器中.

.net asp.net data-binding eval

17
推荐指数
2
解决办法
3万
查看次数

在Javascript eval中跟踪错误的源代码行

我正在异步构建包含javascripts的东西,这是有效的,但是我正在寻求改进错误检测(所以所有的错误似乎都不是来自AJAX调用附近的一些线路,它们将它们拉下来.

如果我使用eval来评估多行javascript文件,有没有办法跟踪哪一行发生错误?

通过在包含时保持对我需要的变量的引用,我没有问题确定错误发生在哪个文件中.我的问题是确定错误发生在哪一.

例:

try {
  eval("var valid_statement = 7; \n invalid_statement())))");
} catch(e) {
  var err = new Error();
  err.message = 'Error in Evald Script: ' + e.message;
  err.lineNumber = ???
  throw err;
}
Run Code Online (Sandbox Code Playgroud)

如何判断错误发生在第二行?具体来说,我有兴趣在Firefox中这样做.

我知道错误对象e.stack在Mozilla浏览器中有,但输出似乎没有正确考虑换行.

javascript error-handling eval

17
推荐指数
2
解决办法
9071
查看次数

Eval()=意外的令牌:错误

我尝试了这个简单的JavaScript代码:

eval('{"Topics":["toto","tata","titi"]}')
Run Code Online (Sandbox Code Playgroud)

例如,在Chrome控制台中,会返回

SyntaxError:意外的令牌:

我在JSONLint上尝试了JSON ,它是有效的.

你看到了这个bug吗?

javascript json eval

17
推荐指数
4
解决办法
3万
查看次数

将代码附加到现有函数的末尾

我需要在函数foo()触发时触发函数bar().我无法控制函数foo或将来是否会改变.我经常有这种情况(我讨厌它).

我写了这个函数来将我的代码添加到函数foo的末尾:

function appendToFunction(fn,code){ 
if(typeof fn == 'function'){
    var fnCode = fn.toString() ;
    fnCode = fnCode.replace(/\}$/,code+"\n}") ;
    window.eval(fnCode);                    // Global scope
    return true ;
}
else{
    return false ;
}
}
Run Code Online (Sandbox Code Playgroud)

例如:

appendToFunction(foo,"bar();");
Run Code Online (Sandbox Code Playgroud)

这对我来说是一个可怕的想法 - 但它确实有效.有人可以指出我更好(更安全)的方向.

编辑:foo不是一个特定的功能,但我最终处理的许多功能.它们不会在页面中动态更改.但它们可能会不时地改变(例如,形式验证要求).

解决方案:我选择了Adam的答案的修改版本.它并不完美,但它比我的更好:

var oldFoo = foo ;
foo = function(){
        var result = oldFoo.apply(this, arguments);
        bar();
        return result ;
}
Run Code Online (Sandbox Code Playgroud)

NB.注意IE6/7中没有.apply()方法的一些本机函数.

javascript eval

17
推荐指数
3
解决办法
1万
查看次数

Python:加速重复执行的eval语句的方法?

在我的代码中,我eval用来评估用户给出的字符串表达式.有没有办法编译或以其他方式加快这种说法?

import math
import random

result_count = 100000
expression = "math.sin(v['x']) * v['y']"

variable = dict()
variable['x'] = [random.random() for _ in xrange(result_count)]
variable['y'] = [random.random() for _ in xrange(result_count)]

# optimize anything below this line

result = [0] * result_count

print 'Evaluating %d instances of the given expression:' % result_count
print expression

v = dict()
for index in xrange(result_count):
    for name in variable.keys():
        v[name] = variable[name][index]
    result[index] = eval(expression) # <-- option ONE
    #result[index] = math.sin(v['x']) * …
Run Code Online (Sandbox Code Playgroud)

python eval

17
推荐指数
3
解决办法
7107
查看次数

在Python中的"eval"中捕获变量

我无法理解Python中"eval()"和"exec"的语义.(此问题中的所有代码在Python 2.7.8和Python 3.4.2中的行为方式相同)."eval" 的文档说:

如果省略[locals和globals],则表达式在调用eval()的环境中执行.

"exec"有类似的语言.我显然不理解这句话,因为我希望以下程序定义的四个函数做同样的事情.

def h(x):
    ls = locals()
    exec('def i(y): return (w, x, y)', globals(), ls)
    i = ls['i']
    def       j(y): return (w, x, y)
    k = eval('lambda y: (w, x, y)')
    l =       lambda y: (w, x, y)
    return i, j, k, l

w = 1

i, j, k, l = h(2)
Run Code Online (Sandbox Code Playgroud)

他们不.

>>> i(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in i
NameError: name …
Run Code Online (Sandbox Code Playgroud)

python eval python-2.7 python-3.4

17
推荐指数
1
解决办法
1600
查看次数

在 Java 17 中使用 Javascript 脚本引擎

我必须将项目从 Java 8 迁移到 Java 17。

我可以解决大多数问题,但它包含一个方法,在该方法中我使用 ScriptEngineManager 来评估数学术语。

 ScriptEngineManager mgr = new ScriptEngineManager();
 ScriptEngine e = mgr.getEngineByName("JavaScript");
 
 String t = "5*7";
 if (isMathTerm(t)) {
    System.out.println(e.eval(t).toString());
 }
Run Code Online (Sandbox Code Playgroud)

在 Java 8 中它按要求工作,但在 Java 17 中e始终为 null。

据谷歌称,Java 17 不再支持 JavaScript 引擎。

由于项目限制,我不允许使用第三方库。

Java 17 中有没有正确的方法来处理这个问题?

java eval scriptengine java-17

17
推荐指数
1
解决办法
2万
查看次数

解析表示元组列表的字符串

我有一些看起来像这样的字符串:

"(8, 12.25), (13, 15), (16.75, 18.5)"
Run Code Online (Sandbox Code Playgroud)

我想将它们中的每一个转换为python数据结构.优选地,包含一对浮点值的元组的列表(或元组).

我可以做到这一点eval("(8, 12.25), (13, 15), (16.75, 18.5)"),给我一个元组元组,但我不认为天真评估外部信息将是一个明智的决定.

所以我想知道优雅的pythonic解决方案是什么样的.

python string tuples eval data-structures

16
推荐指数
1
解决办法
8361
查看次数

node.js - 评估实时进程

有没有人使用现有的node.js REPL为自己设置这样的东西?我没想到要快速做到这一点.

我今天这样做的方式是使用emacs和这个:https: //github.com/ivan4th/swank-js

该模块由以下部分组成:

  1. 一个SLIME-js插件到emacs,结合js2-mode,让你只需在函数def的主体中的某个地方发出一个CMx,然后关闭函数的字符串到...

  2. 用Node.js编写的Swank-js服务器(是的,您可以从本地计算机直接评估到远程进程) - 它接收您评估的函数的字符串并实际上将其删除

  3. 整个部分允许您使用浏览器连接到该服务器上的另一个端口,然后让您在该浏览器上操作DOM(这非常了不起但不相关)

我的解决方案在emacs端使用SLIME-js我需要('swank-js')在我的app.js文件上

现在..我有几个关于我的解决方案或其他可能的问题和问题:

Q1:这有点过头了吗?有人有秘密的方式来评估从纳米到他的实时过程的东西吗?

Q2:我不得不改变swank-js评估的方式..它使用了某种黑魔法:


var Script = process.binding('evals').Script;
var evalcx = Script.runInContext;
....
this.context = Script.createContext();
for (var i in global) this.context[i] = global[i];
this.context.module = module;
this.context.require = require;
...
r = evalcx("CODECODE", this.context, "repl");
Run Code Online (Sandbox Code Playgroud)

据我所知,只是将全局变量复制到新的上下文中,并且在eval上,不会更改原始函数定义 - SOOO ..我只是使用简单的"eval"和IT WORKS.

你对此有何评论?

问题3:为了重新评估函数,它需要是一个GLOBAL函数 - 将所有函数定义都设置为全局(类似clojure)是不好的做法?你认为还有另一种方法吗?

eval swank commonjs node.js read-eval-print-loop

16
推荐指数
1
解决办法
3913
查看次数