我正在玩eval
并注意到它可以评估Chrome,Firefox和Opera中的非字符串:
eval(Array) === Array; // true
eval(this) === this; // true
eval(4 * 3 / 2) === 6; // true
这是标准行为吗?是否记录在任何地方?我找不到任何提及eval
除了字符串参数之外的其他内容。
如果这不是标准行为,有人可以识别此不的主机环境吗?
答案 0 :(得分:5)
如果没有字符串,代码已经在较低级别进行评估,即在传递给eval之前(例如,您的上一个语句只是eval(6)
)。这是任何功能的情况;这是JavaScript代码的评估方式。 eval
在这个意义上并不神奇,因为它“只是”一个“只是”接受一个论点的函数。
the specification中描述了eval
在传递非表达字符串的表达式时应返回的内容:
1。如果Type(
x
)不是String,则返回x
。