在setTimeout中传递一个数组作为eval的代码
Passing an array as the code to eval in setTimeout?
今天我的朋友发给我一些代码,做了一些意想不到的事情:
setTimeout(["console.log(1", "2)"], 1000)
我预计这将失败或做一些魔术,但它只是在1秒后打印1 2
。我可以看到它可能用一个简单的array.join(',')
计算数组到"console.log(1,2)"
,但为什么会发生这种情况?
我已经研究了setTimeout
的eval能力,但它应该只做一个函数或字符串。在这里使用数组没有任何意义,在谷歌上搜索为什么这样做没有任何结果,甚至没有接近的用例。
setTimeout
可以计算字符串作为javascript,如果值不是function
,它会将值转换为字符串,可能通过使用toString()
你可以看到如果你这样做
"" + ["console.log(1", "2)"]
或
["console.log(1", "2)"].toString();
得到
'console.log(1,2)'
然后对其求值
如果不是函数,则使用.toString()
获取字符串值
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- JavaScript数组包含一个值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- jQuery$.inArray()总是返回-1和一个对象数组
- 在数组中的一个元素上设置多个值
- javascript处理一个对象数组以获得一个新的对象数组
- 作为一个二维数组,从ajax接收
- 你能用来自数组的属性名称生成一个对象吗
- 多维关联数组的最后一个索引
- 如何创建一个方法来验证数组的范围
- 循环以检查数组中的最后一个图像
- 在Javascript中将一个值和字符串数组转换为if语句
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 如何将一个对象添加到每个对象数组中
- 如何创建一个谷歌地图地理坐标数组
- 如何从另一个带下划线的数组中筛选带元素的数组
- 使用window.location.htm和匹配的URL数组(一个用于桌面,一个用于移动)将桌面网站重定向到移动
- Javascript排序多维数组-一个完整的例子
- 刽子手的游戏.2数组.一个需要相应地更新另一个