今天我的朋友们发了一些意外的代码:
setTimeout(["console.log(1", "2)"], 1000)
我预计这会失败或做一些魔术,但它只会在1秒后打印1 2
。
我可以看到它可能使用简单的"console.log(1,2)"
将数组评估为array.join(',')
,但为什么会这样呢?
我研究了setTimeout
的eval功能,但它应该只执行函数或字符串。在这里使用数组没有任何意义,并且在谷歌搜索为什么这样做有效,甚至没有结果用例。
答案 0 :(得分:3)
setTimeout
可以将字符串评估为javascript,如果该值不是function
,则会将该值转换为字符串,可能是使用toString()
你可以看看你是否这样做
"" + ["console.log(1", "2)"]
或
["console.log(1", "2)"].toString();
你得到了
'console.log(1,2)'
然后相应地评估
答案 1 :(得分:0)
如果它不是函数,那么它使用.toString()
来获取字符串值。