你能告诉我这种特定语法结构的原因吗?
eval('(' + jsonString+ ')')
Run Code Online (Sandbox Code Playgroud)
解析json文本时.克罗克福德说:" 文本必须用parens包装,以避免绊倒JavaScript语法中的歧义." 在这里.那是什么意思?
我们能避免吗?
<% if(Eval("SaveDate") != DBNull.Value){ %>
do magic
<%} %>
Run Code Online (Sandbox Code Playgroud)
给我错误:数据绑定方法,如Eval(),XPath()和Bind()只能在数据绑定控件的上下文中使用.
我可以写:<%#Eval("SaveDate")!= DBNull.Value?做魔法但我需要在if语句中做很多html魔术.
我知道我应该添加#以便使用Eval,但不确定正确的语法.
我的Rails应用程序有关于何时应在页面上显示一些内容的复杂规则.我决定通过在Ruby中编写谓词(简单的"是/否"函数)并将它们存储在数据库中以便随后进行评估来实现这一点.这很简单.
我主要担心的是安全性:如果恶意某人弄清楚如何写入数据库,他们可能会在数据库中粘贴任意Ruby代码,然后" 所有基础都属于我们 ".
那么是否可以创建一个"沙盒"eval,例如,删除了所有IO操作?
有什么办法可以在特定范围内执行eval()(但不是全局)?
例如,以下代码不起作用(在第二个语句中未定义)因为它们位于不同的范围内:
eval(var a = 1);
eval(alert(a));
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想动态创建一个范围.例如(语法肯定是错误的,但只是为了说明这个想法)
var scope1;
var scope2;
with scope1{
eval(var a = 1); eval(alert(a)); // this will alert 1
}
with scope2{
eval(var a = 1); eval(a++); eval(alert(a)); // this will alert 2
}
with scope1{
eval(a += 2); eval(alert(a)); // this will alert 3 because a is already defined in scope1
}
Run Code Online (Sandbox Code Playgroud)
有关如何实现这样的事情的任何想法?谢谢!
如果我运行这个:
eval('{ear: {"<=": 6}}');
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
未捕获的SyntaxError:意外的令牌:
让我们手动创建对象:
var foo = {};
foo.ear = {};
foo.ear["<="] = 6;
Run Code Online (Sandbox Code Playgroud)
现在,以下代码:
JSON.stringify(foo)
Run Code Online (Sandbox Code Playgroud)
返回以下字符串:
'{ "耳朵":{ "<=":6}}'
与我开始使用的字符串相同(除了白色字符,但这些字符不相关),因此eval(JSON.stringify(foo))返回相同的语法错误错误消息.然而:
$.parseJSON(JSON.stringify(foo))
Run Code Online (Sandbox Code Playgroud)
正确执行.这是什么原因?
编辑:
正如nnnnnn和Ron Dadon指出的那样,初始字符串和结果stringify是不同的.但是,正如我在问题中指出的那样,即使stringify用作输入的eval结果也会导致语法错误消息.
EDIT2:
根据所进行的答案和实验,这个功能很有趣:
function evalJSON(text) {
return eval("(" + text + ")");
}
Run Code Online (Sandbox Code Playgroud) ajax请求返回一个标有我用户输入的JSON数组.输入已经过清理,使用eval()函数,我可以轻松创建我的javascript对象并更新我的页面...
所以这就是问题所在.无论我如何努力消毒输入,我宁愿不使用eval()函数.我已经检查了谷歌如何使用"没有评估的AJAX中的JSON",并且已经运行了很多不同的方法......
我应该使用哪一个?是否有标准的,经过验证的安全方法?
我需要执行一些我从一些AJAX调用中获得的自定义JavaScript.我可以做一个eval字符串,或者我可以将它添加script到DOM 中的-tag中.哪种方法会更好?
var dynamicScript = 'alert(\'Hello world!\');';
Run Code Online (Sandbox Code Playgroud)
方法1 - 脚本:
var x = '<script type="text/javascript">' + dynamicScript +'</scr' + 'ipt>';
$(document.body).append(x);
Run Code Online (Sandbox Code Playgroud)
方法2 - 评估:
eval(dynamicScript);
Run Code Online (Sandbox Code Playgroud)
什么方法更好,为什么?还是有更好的选择?
请考虑以下示例:
i=7
j=8
k=10
def test():
i=1
j=2
k=3
return dict((name,eval(name)) for name in ['i','j','k'])
Run Code Online (Sandbox Code Playgroud)
它返回:
>>> test()
{'i': 7, 'k': 10, 'j': 8}
Run Code Online (Sandbox Code Playgroud)
为什么eval不考虑函数内定义的变量?从文档中,您可以选择传递全局变量和本地字典.这意味着什么?最后,我如何修改这个小案例才能使它工作?
我们需要在运行时评估对象中的值,同时我们有一个确切成员路径的文本语句,例如:myobject.firstMember.secondMember [3] .text
我们考虑使用正则表达式解析这个文本语句,然后评估文本通过使用反射,但在我们这样做之前,我想知道C#是否支持某种评估能力?所以我们不必自己解析.微软如何在他们的直接窗口或观看窗口中执行此操作?
非常感谢你,
阿迪巴尔达
我无法使用该eval()功能导入模块.
所以,我有一个功能,如果我这样做的import vfs_tests as v话.然而,使用相同的导入eval()像eval('import vfs_tests as v')抛出一个语法错误.
为什么会这样?