将数组作为代码传递给setTimeout中的eval?

时间:2014-05-15 21:37:57

标签: javascript eval settimeout

今天我的朋友们发了一些意外的代码:

setTimeout(["console.log(1", "2)"], 1000)

我预计这会失败或做一些魔术,但它只会在1秒后打印1 2。 我可以看到它可能使用简单的"console.log(1,2)"将数组评估为array.join(','),但为什么会这样呢?

我研究了setTimeout的eval功能,但它应该只执行函数或字符串。在这里使用数组没有任何意义,并且在谷歌搜索为什么这样做有效,甚至没有结果用例。

2 个答案:

答案 0 :(得分:3)

setTimeout可以将字符串评估为javascript,如果该值不是function,则会将该值转换为字符串,可能是使用toString()

你可以看看你是否这样做

"" + ["console.log(1", "2)"]

["console.log(1", "2)"].toString();

你得到了

'console.log(1,2)'

然后相应地评估

答案 1 :(得分:0)

如果它不是函数,那么它使用.toString()来获取字符串值。