我正在寻找替换 eval("new object();" ) 的最佳方法
丑陋的来源:
//var type = window.$(droppedDomNode).data("shape");
var type = "sankey.shape.Start";
var figure = eval("new "+type+"();");
// create a command for the undo/redo support
var command = new draw2d.command.CommandAdd(this, figure, x, y);
Run Code Online (Sandbox Code Playgroud)
eval 创建一个新的 sankey.shape.Start 对象。
我正在寻找替换此类代码的最佳解决方案。
谢谢
以下是它在 Chrome 开发工具中的显示示例:
setTimeout(console.log(`String`), 100);
Run Code Online (Sandbox Code Playgroud)
字符串 拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“script-src'self' 'unsafe-inline' https:”。
此警报意味着什么以及将 setTimeout 与字符串一起使用的安全问题是什么?
可能重复:
如何在使用之前检查我是否有Perl模块?
我想评估一个类似于这样的use语句:eval {use $ foo;}但是我遇到了正确的语法问题.我尝试了各种字符串插值组合,但即使对于不存在的模块,eval也会成功.有人可以帮我把这个吗?
美好的一天!目前我正在学习一门课程,其中包含以下内容:
if( $something) { eval ('$actualValue = &$this->'.$value.';'); }
Run Code Online (Sandbox Code Playgroud)
你可以向我解释使用eval并在没有eval的情况下编写它的优点和缺点(只需定期通过php分配值)
更新1
对不起,但我刚刚在课程的其他部分看到了使用eval的更完整版本:
if( $something) {
eval ('$actualValue = &$this->'.$value.';');
if(isset($actualValue)) {
//some code
}
}
Run Code Online (Sandbox Code Playgroud)
它现在更清楚......但仍然存在一个问题:为什么不在没有评估的情况下做到这一点......只是不明白.但仍然感谢大家的答案和链接!
我试图将此eval传递给javascript但继续收到以下错误:
<input type="submit" value="Send" id="btnPDf" onclick='<%# "openLink( " + Eval("ID" ) + " );" %>' runat="server" />
Run Code Online (Sandbox Code Playgroud)
萤火虫中的错误:
Timestamp: 12/11/2012 17:59:16
Error: SyntaxError: identifier starts immediately after numeric literal
Line: 1, Column: 24
Source Code:
openLink( b690d0c5-9269-424a-ac57-02f3359c982f );
Run Code Online (Sandbox Code Playgroud)
我试过用双引号和反斜杠传递它,如'\'但仍然没有快乐
Modern Scheme(及其后代像Racket)具有非常强大的卫生宏系统.在我看来,quote和quasiquote定义(不卫生)宏已经失去了他们的历史地位(如Common Lisp中仍然做,如果我没有搞错吧)卫生系统的宏.其实在语言报告,quote并quasiquote仅作为构建数据的便捷方式,特别列出.如果她能够忍受乏味,那么人们可以没有它们.例如,(quote (+ 1 2))可以重写为(list (quote +) 1 2),(quasiquote (+ (unquote (- 2 1)) 2))可以重写为(list (quote +) (- 2 1) 2).
现在假设我们将符号的新原始类型引入Scheme:以大写字母开头的标识符是符号,否则是变量.所以X意味着符号x,然后上面的例子可以写成(list Plus 1 2)和(list Plus (- 2 1) 2).(我们假设它Plus代表符号+.)现在我们可以说quote并且quasiquote是多余的吗?或者我会错过什么?
编辑:
eval在一些罕见的情况下似乎仍然有用:在SCHEME中进行EVAL
澄清问题.
我喜欢"跳转字典"的概念,其中包含键:值,其中值是函数.不过,我不确定我是否应该喜欢这个概念.
我想替换一个长列表if if-else if语句.(我应该使用switch声明吗?)
有没有办法在不使用eval的情况下实现"跳转字典"?(我已经读过这个关于eval 为什么不好的原因: 为什么使用JavaScript eval函数是一个坏主意? )
使用eval的示例
function some_func(arg) { console.log('I am a some func') };
function find_my(arg) { console.log('we are looing for your ' + arg); };
var jump = {
'1' : 'some_func()',
'2' : 'find_my("cat")',
'3' : 'find_my("dog")'
}
eval(jump['3'])
eval(jump['2'])
eval(jump['1'])
Run Code Online (Sandbox Code Playgroud)
谢谢.
这段代码有什么问题:
<?php eval(" $start = microtime(true)*1000; echo 'hello'; $end=microtime(true)*1000; $time = $end-$start; $time = round($time,4); echo '<br />Time taken: '.$time.'ms<br />'; "); ?>
它只是一行代码(不要问为什么),但为了可读性,我再说一遍
<?php
eval(" $start = microtime(true)*1000;
echo 'hello';
$end=microtime(true)*1000;
$time = $end-$start;
$time = round($time,4);
echo '<br />Time taken: '.$time.'ms<br />';
");
?>
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Parse error: syntax error, unexpected '=' in ...\test2.php(1) : eval()'d code on line 1
我一直在阅读一些关于将脚本注入HTML文件的内容,主要是在这里
但我也遇到了使用这种document.write方法的这种变化.
document.write('<scr'+'ipt type="text/javascript" src="' + url + '"></scr'+'ipt>');
分割标签的<script部分有什么好处?<script><scr'+'ipt