为什么`eval`适用于非字符串?

时间:2012-03-10 17:17:11

标签: javascript standards eval

我正在玩eval并注意到它可以评估Chrome,Firefox和Opera中的非字符串:

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

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

如果这不是标准行为,有人可以识别此的主机环境吗?

1 个答案:

答案 0 :(得分:5)

如果没有字符串,代码已经在较低级别进行评估,即在传递给eval之前(例如,您的上一个语句只是eval(6))。这是任何功能的情况;这是JavaScript代码的评估方式。 eval在这个意义上并不神奇,因为它“只是”一个“只是”接受一个论点的函数。

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

  

1。如果Type(x)不是String,则返回x