依赖Function.prototype.toString是否安全?

时间:2011-12-10 04:44:54

标签: javascript function cross-browser tostring

依靠Function.prototype.toString返回一个将解析为有效javascript函数的字符串(对于用户定义的函数)是否安全?

是否有任何常用的javascript引擎偏离规范,只要它们以字符串形式表示函数对象?

我见过this question,但我不确定它是否在问同样的事情。我不在乎所有实现中的格式是否完全相同或者其他什么,我更担心一些缩小的js引擎只是剥离整个函数体......

另一个related question,但没有足够的密切关系来为这个问题找到令人满意的答案。

2 个答案:

答案 0 :(得分:3)

我认为它是安全的,因为它是一个标准。每个严肃的引擎都会这样。这也是我的项目Jscex所依据的。它适用于所有浏览器(甚至是旧版IE6)和Node.js.我这一年做这件事。 :)

答案 1 :(得分:1)

应该注意,eval'd代码将采用当前范围,而Function构造函数将只占用全局范围。

function createClosure() {
    var x = 20,
        y = 10;

    // Doesn't know what x & y are
    var fn = new Function("return x + y");

    // Evaluates normally
    var result = eval("x + y");
}