【问题标题】:Why does `eval` work on non-strings?为什么 eval 对非字符串有效?
【发布时间】:2012-03-10 17:17:10
【问题描述】:

我在玩eval,发现它可以在 Chrome、Firefox 和 Opera 中评估非字符串:

eval(Array) === Array; // true
eval(this) === this;   // true
eval(4 * 3 / 2) === 6; // true

这是标准行为吗?它在任何地方都有记录吗?除了字符串参数之外,我找不到任何提及 eval 的内容。

如果这不是标准行为,有人能识别出这种不起作用的主机环境吗?

【问题讨论】:

    标签: javascript standards eval


    【解决方案1】:

    如果没有字符串,则代码已经在较低级别进行了评估,即在将其传递给 eval 之前(例如,您的最后一条语句只是在执行 eval(6))。任何功能都是如此。这就是评估 JavaScript 代码的方式。从这个意义上说,eval 并不神奇,因为它“只是”一个“只是”接受参数的函数。

    the specification 中描述了当传递非字符串的 am 表达式时 eval 应返回的内容:

    1。如果 Type(x) 不是字符串,则返回x

    【讨论】:

    • 是的,我刚刚发现了。我不知道eval 是这样工作的。
    • +1 你打败了我。还想提一下,如果 x 不是字符串,它只会返回 x
    • 我认为没有任何理由真正使用 eval 这样,是吗?
    • @GGG:确实没有,因为eval 这样显然是个问题。我想由于安全问题,没有理由将eval 与字符串一起使用。
    • @pimvdb 显然有有用的corner cases 用于常规eval...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多