标签: eval

从PHP中的变量实例化一个类?

我知道这个问题听起来很模糊,所以我会用一个例子说清楚:

$var = 'bar';
$bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()');
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的.你会怎么做?我当然可以使用这样的eval():

$var = 'bar';
eval('$bar = new '.$var.'Class(\'var for __construct()\');');
Run Code Online (Sandbox Code Playgroud)

但我宁愿远离eval().没有eval()有没有办法做到这一点?

php variables eval class

134
推荐指数
4
解决办法
11万
查看次数

将字符串转换为模板字符串

是否可以将模板字符串创建为通常的字符串

let a="b:${b}";
Run Code Online (Sandbox Code Playgroud)

然后将其转换为模板字符串

let b=10;
console.log(a.template());//b:10
Run Code Online (Sandbox Code Playgroud)

没有eval,new Function以及动态代码生成的其他方法?

javascript eval ecmascript-6 template-strings

128
推荐指数
11
解决办法
5万
查看次数

为什么使用'eval'是一种不好的做法?

我正在使用以下课程轻松存储我的歌曲数据.

class Song:
    """The class to store the details of each song"""
    attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
    def __init__(self):
        for att in self.attsToStore:
            exec 'self.%s=None'%(att.lower()) in locals()
    def setDetail(self, key, val):
        if key in self.attsToStore:
            exec 'self.%s=val'%(key.lower()) in locals()
Run Code Online (Sandbox Code Playgroud)

我觉得这比写出一个if/else块更具可扩展性.但是,eval似乎被认为是一种不良做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?

python eval

125
推荐指数
6
解决办法
3万
查看次数

执行用.innerHTML插入的<script>元素

我有一个脚本,使用一些内容将一些内容插入元素innerHTML.

例如,内容可以是:

<script type="text/javascript">alert('test');</script>
<strong>test</strong>
Run Code Online (Sandbox Code Playgroud)

问题是<script>标签内的代码没有被执行.我用Google搜索了一下,但没有明显的解决方案.如果我使用jQuery插入内容$(element).append(content);,脚本部分eval会在注入DOM之前得到.

有没有人有一段执行所有<script>元素的代码?jQuery代码有点复杂,所以我无法弄清楚它是如何完成的.

编辑:

通过窥视jQuery代码,我已经设法弄清楚jQuery是如何做到的,这导致了以下代码:

Demo:
<div id="element"></div>

<script type="text/javascript">
  function insertAndExecute(id, text)
  {
    domelement = document.getElementById(id);
    domelement.innerHTML = text;
    var scripts = [];

    ret = domelement.childNodes;
    for ( var i = 0; ret[i]; i++ ) {
      if ( scripts && nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
            scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
        }
    }

    for(script …
Run Code Online (Sandbox Code Playgroud)

javascript dom eval innerhtml

104
推荐指数
8
解决办法
14万
查看次数

为什么要在Bash中避免使用eval,我应该使用什么呢?

我一次又一次地看到Bash在Stack Overflow上使用eval的答案,并且答案得到了抨击,双关语是为了使用这种"邪恶"结构.为什么eval这么邪恶?

如果eval不能安全使用,我应该使用什么呢?

unix linux bash eval

94
推荐指数
3
解决办法
6万
查看次数

eval()和新的Function()是一样的吗?

这两个功能在幕后做同样的事情吗?(在单一陈述函数中)

var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}

console.log(evaluate('2 + 1'));
console.log(func('2 + 1'));
Run Code Online (Sandbox Code Playgroud)

javascript optimization eval function

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

如何在bash中修改函数内的全局变量?

我正在使用这个:

GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

我有一个如下脚本:

#!/bin/bash

e=2

function test1() {
  e=4
  echo "hello"
}

test1 
echo "$e"
Run Code Online (Sandbox Code Playgroud)

哪个回报:

hello
4
Run Code Online (Sandbox Code Playgroud)

但是如果我将函数的结果赋给变量,e则不修改全局变量:

#!/bin/bash

e=2

function test1() {
  e=4
  echo "hello"
}

ret=$(test1)

echo "$ret"
echo "$e"
Run Code Online (Sandbox Code Playgroud)

返回:

hello
2
Run Code Online (Sandbox Code Playgroud)

我听说过在这种情况下使用eval,所以我这样做test1:

eval 'e=4'
Run Code Online (Sandbox Code Playgroud)

但结果相同.

你能解释一下为什么不修改它吗?我怎么能保存test1函数的回声ret并修改全局变量呢?

variables bash eval global-variables

83
推荐指数
5
解决办法
14万
查看次数

什么时候是PHP的eval邪恶?

在我用PHP开发的这些年里,我总是听说使用eval()是邪恶的.

考虑以下代码,使用第二个(更优雅)选项是否有意义?如果没有,为什么?

// $type is the result of an SQL statement
// e.g. SHOW COLUMNS FROM a_table LIKE 'a_column';
// hence you can be pretty sure about the consistency
// of your string
$type = "enum('a','b','c')";

// possibility one
$type_1 = preg_replace('#^enum\s*\(\s*\'|\'\s*\)\s*$#', '', $type);
$result = preg_split('#\'\s*,\s*\'#', $type_1);

// possibility two
eval('$result = '.preg_replace('#^enum#','array', $type).';');
Run Code Online (Sandbox Code Playgroud)

php eval

82
推荐指数
9
解决办法
4万
查看次数

JavaScript中的(1,eval)('this')vs eval('this')?

我开始阅读JavaScript模式,一些代码让我困惑.

var global = (function () {
    return this || (1, eval)('this');
}());
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

Q1:

(1, eval) === eval

为什么以及如何运作?

Q2:为什么不呢

var global = (function () {
    return this || eval('this');
}());
Run Code Online (Sandbox Code Playgroud)

要么

 var global = (function () {
    return this;
}());
Run Code Online (Sandbox Code Playgroud)

javascript eval

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

eval(解析(...))的危险是什么?

关于如何避免使用有几个问题 eval(parse(...))

这引发了一些问题:

  • 为什么要特别eval(parse())避免?
  • 最重要的是,危险是什么?
    • 如果代码没有用于生产,是否有任何危险?(我在想,任何可能会产生意想不到的结果的危险.很明显,如果你不小心你正在解析什么,你就会遇到问题.但这是否比邋with更危险get()?)

parsing eval r

62
推荐指数
4
解决办法
1万
查看次数