我正在编写一个 GreaseMonkey 脚本(使用 JQuery),并且我需要一些由原始页面中的脚本设置的变量,如下所示:
<script type="text/javascript">
var rData = {"20982211":[1,0,1],"20981187":[8,0,4]};
</script>
Run Code Online (Sandbox Code Playgroud)
我从另一个页面获取这个元素并尝试评估它,奇怪的是这不起作用:
$.get(link_url, null, function(data) {
alert("1:" + rData);
eval($(data).find("script").text());
alert("2:" + rData);
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我运行脚本时,它可以在 firebug 控制台上工作(我只是在没有 .get 的情况下直接在目标页面上尝试了 eval),但它没有。它在两个警报中都给了我“null”。
有任何想法吗?
像我这样的突击队员如何使用一些 JavaScript 内置方法(如果有!)或任何其他可能的方式检查输入的代码是否是有效的 JavaScript 源?(类似于 NetBeans、Eclipse 等各种 IDE 中的预解析器)?
我必须检查代码是否正常,然后 window.eval()-it 到当前文档实例。
这个问题参考了池上的评论:
[...] But if you're going to put an eval around every statement, just use RaiseError => 0. [...]
Run Code Online (Sandbox Code Playgroud)
在这个线程中。
如果我在这种情况下这样RaiseError做,我会得到什么?0
#!/usr/bin/env perl
use warnings;
use 5.10.1;
use DBI;
my $db = 'my_test_sqlite_db.sqlite';
open my $fh, '>', $db or die $!;
close $fh or die $!;
my ( $dbh, $sth );
eval {
$dbh = DBI->connect( "DBI:SQLite:dbname=$db", "", "", {} );
};
if ( $@ ) { print $@ };
my $table = 'my_sqlite_table';
say …Run Code Online (Sandbox Code Playgroud) eval() 如何改变字典?这是一个例子:创建一个字典 -> print -> eval -> print
>>> a={'a':'a','b':'b'}
>>> print(a)
{'a': 'a', 'b': 'b'}
>>> eval('a == "a"',a)
True
>>> print(a)
{'a': 'a', '__builtins__': {'bytearray': <class 'bytearray'>, 'IndexError': <class 'IndexError'>, 'all': <built-in function all>, 'help': Type help() for interactive help, or help(object) for help about object., 'vars': <built-in function vars>, 'SyntaxError': <class 'SyntaxError'>, 'UnicodeDecodeError': <class 'UnicodeDecodeError'>, 'memoryview': <class 'memoryview'>, 'isinstance': <built-in function isinstance>, '__build_class__': <built-in function __build_class__>, 'copyright': Copyright (c) 2001-2012 Python Software Foundation.
All Rights Reserved.
...
Run Code Online (Sandbox Code Playgroud) 作为家庭作业的一部分,我试图在浏览器环境中实现一个类似于 Firebug 中可用的 JavaScript 控制台。从我收集到的情况来看,eval()这似乎是最简单的方法。然而,即使是非常基本的用户输入,我的代码也会遇到一些问题。例如:
var number = 5;\nRun Code Online (Sandbox Code Playgroud)\n\n导致语法错误而不仅仅是评估undefined像 Firebug 中那样进行评估。因此,我似乎根本无法在 eval 字符串内声明变量。如果我做一些更简单的事情,例如:
3 + 4 * Math.PI\nRun Code Online (Sandbox Code Playgroud)\n\n它工作正常。我试图找到一个有人使用的例子eval()在包含变量声明的字符串上使用的示例,但我似乎找不到任何人这样做。
在将用户输入编译成新字符串之前,我是否需要使用正则表达式完全解析用户输入eval()?
能把eval()分号理解为换行符吗?我也找不到使用这些的人。
function runMiniFirebug() {\n var userInput = document.getElementById("user-input").value;\n try {\n var userOutput = eval(\'(\' + userInput + \')\');\n document.getElementById("js-output").innerHTML += \'<p class="input">>>>\' + userInput + \'<p>\';\n document.getElementById("js-output").innerHTML += \'<p class="ouput">\' + userOutput + \'<p>\';\n }\n catch(error) {\n document.getElementById("js-output").innerHTML += \'<p class="input">>>>\' + …Run Code Online (Sandbox Code Playgroud) 我想研究和摆弄自修改函数,并知道 JavaScript 具有eval和其他有趣的反射特性,例如使函数从内部打印其主体,我想我想做一些自修改函数测试使用 JavaScript。
我想要一个简单的函数,当被调用时,它会根据任何规则修改自身。
就像也许某个函数可以先执行一个简单的操作console.log,然后下次调用它时它就会执行此操作alert。这显然可以通过 来实现if,但我在这里寻找的是实际的物理函数首先应该如下所示:
function selfm()
{
console.log('hello')
// + modify self here somehow
}
Run Code Online (Sandbox Code Playgroud)
第一次通话后:
function selfm()
{
alert('hello')
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能以最简单的形式实现这种行为?
我正在查看另一个堆栈溢出问题,他们正在使用看起来像是 makefile 的未记录行为...如果我有以下 Makefile:
X=X
all:
@echo $@: $(X)
$(eval X=Y)
@echo $@ part2: $(X)
all2:
@echo $@: $(X)
Run Code Online (Sandbox Code Playgroud)
然后我运行:
~> make all2
all2: X
~> make all all2
running all
all: X
all part2: Y
all2: Y
Run Code Online (Sandbox Code Playgroud)
我本来希望$(eval X=Y)在 Makefile 解析时展开,并将shell变量设置X为Y配方的该行(即什么都不做)。相反,它似乎在运行配方时进行评估all,另外,它似乎设置了 make 变量。我浏览了 make 手册页和在线手册,但找不到任何描述此行为的内容(我正在使用 GNU Make 4.0)。有人可以向我指出一些描述这一点的文档,或者解释一下发生了什么吗?
我有以下代码。评估命令变量及其包含的参数的最佳方法是什么。
这是一个人为的例子,但却是解释我想要在更大范围内做的事情的最简单方法。
class Job():
def random_number(self, start, end, prec=0):
number = round(random.uniform(start,end),prec)
if(prec == 0):
return int(number)
return number
def run(self, command):
#command = "self.random_number(1,10,0)"
#**************
# What would be the best way to 'eval' the content of the 'command' variable and the parameters it contains?
#**************
job = Job()
job.run("self.random_number(1,10,0)")
Run Code Online (Sandbox Code Playgroud) 我有以下几点:
x = [1,2,3,4,5]
def foo(lbd:str, value):
ret_val = eval(lbd, globals(), locals())
print(ret_val)
Run Code Online (Sandbox Code Playgroud)
在此调用中使用 'value' 变量成功:
>>> foo("[i for i in value]",x)
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
但是这个失败了:
>>> foo(r"any([x in value for x in {'',0,None,'0'}])", x)
Traceback (most recent call last):
File "<pyshell#171>", line 1, in <module>
foo(r"any([x in value for x in {'',0,None,'0'}])", x)
File "<pyshell#165>", line 2, in foo
ret_val = eval(lbd, globals(), locals())
File "<string>", line 1, in <module>
File "<string>", line 1, in <listcomp>
NameError: …Run Code Online (Sandbox Code Playgroud) 有没有办法在不使用 eval(parse()) 的情况下使用字符串作为参数进行过滤?
library("dplyr")
subset <- "carb == 4"
subset_df <- mtcars %>% filter(eval(parse(text = subset)))
Run Code Online (Sandbox Code Playgroud) eval ×10
javascript ×4
python ×3
python-3.x ×2
ajax ×1
command-line ×1
dbi ×1
dictionary ×1
dplyr ×1
exception ×1
firebug ×1
function ×1
greasemonkey ×1
jquery ×1
makefile ×1
perl ×1
r ×1
raiseerror ×1
reflection ×1
tidyverse ×1