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

Dag*_*bit 3 javascript standards eval

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

eval(Array) === Array; // true
eval(this) === this;   // true
eval(4 * 3 / 2) === 6; // true
Run Code Online (Sandbox Code Playgroud)

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

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

pim*_*vdb 5

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

什么eval是表达式时传递的是不是一个字符串描述应该返回规范:

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