相关疑难解决方法(0)

在特定的上下文中调用eval()

我有以下javaScript"class":

A = (function() {
   a = function() { eval(...) };
   A.prototype.b = function(arg1, arg2) { /* do something... */};
})();
Run Code Online (Sandbox Code Playgroud)

现在让我们假设在eval()中我传递的字符串包含调用带有一些参数的表达式:

 b("foo", "bar")
Run Code Online (Sandbox Code Playgroud)

但后来我得到b没有定义的错误.所以我的问题是:如何在A类语境中调用eval?

javascript

46
推荐指数
7
解决办法
4万
查看次数

将eval()限制在狭窄的范围内

我有一个javascript文件,读取另一个文件,其中可能包含需要eval() - ed的javascript片段.脚本片段应该符合javascript的严格子集,这限制了它们可以做什么以及它们可以更改哪些变量,但我想知道是否有某种方法可以通过阻止eval在全局范围内查看变量来强制执行此操作.类似于以下内容:

function safeEval( fragment )
{
    var localVariable = g_Variable;

    {
        // do magic scoping here so that the eval fragment can see localVariable
        // but not g_Variable or anything else outside function scope

        eval( fragment );
    }
}
Run Code Online (Sandbox Code Playgroud)

实际的代码不需要看起来像这样 - 我对任何和所有带闭包的奇怪技巧都是开放的等等.但我确实想知道这是否可能.

javascript eval

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

如何在React中使用JSX呈现字符串

我需要在React类中呈现HTML(JSX)字符串.我不知道这是否可能. dangerouslySetInnerHTML对我无效,因为我在此文件中有不同的反应组件.这不是简单的HTML.

我有一个预期结果的例子:https: //jsfiddle.net/86rg50re/1/

var MyComponent = React.createClass({
    propTypes: {
        owner: React.PropTypes.string
    },

    render: function() {
        return <div>Congrats {this.props.owner}! you have rendered MyComponent ({this.props.children})</div>;
    }
});

var Hello = React.createClass({
    render: function() {
        return <div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>;
    }
});
Run Code Online (Sandbox Code Playgroud)

但我所拥有的是:

var Hello = React.createClass({
    render: function() {
        var content = '<div>Header <MyComponent owner={"Daniel"}>Yayyyyyy!</MyComponent></div>';
        return transformStringToJSX(content);
    }
Run Code Online (Sandbox Code Playgroud)

显然transformStringToJSX不存在.

有没有办法渲染jsx字符串?

html5 reactjs react-jsx

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

在 AWS Lambda 中使用 JavaScript eval()

我想使用 AWS Lambda 运行用户通过 Web 提交的 JavaScript 代码。我的 Lambda 函数将返回返回值 、stderrstdout。这样做我可能会遇到什么问题?

恶意用户是否能够提交导致 Lambda 函数出现问题的代码?用户所做的更改(例如对节点环境或文件系统的更改)是否在调用中持续存在?有什么办法可以防止这种情况发生吗?

eval()可以将文件写入 Lambda 文件系统并调用:

const userCodeProcess = require('child_process').fork('user_code.js')
userCodeProcess.on('message', response.send)
Run Code Online (Sandbox Code Playgroud)

child-process amazon-web-services node.js aws-sdk aws-lambda

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

如何在严格模式下替换`with`语句

此代码运行最佳并且易于理解:

function evalInScope(js, contextAsScope) {
    //# Return the results of the in-line anonymous function we .call with the passed context
    return function() {
        with(this) {
            return eval(js);
        };
    }.call(contextAsScope);
}
evalInScope("a + b", {a: 1, b: 2}); // 3 obviously, but fails in strict mode!
Run Code Online (Sandbox Code Playgroud)

然而,“聪明”的大脑决定删除该with声明,而不进行适当的替换。

问题:如何让它在自动处于严格模式的 ES6 中再次工作?

javascript with-statement strict-mode ecmascript-6

-3
推荐指数
1
解决办法
135
查看次数