JavaScript构造等效于eval()

时间:2014-04-29 15:12:07

标签: javascript reflection eval

在JavaScript中,eval()接受一个字符串并将其作为JavaScript代码执行,例如,

eval( "alert('I am parsed as JavaScript code.');");

我感兴趣的是除eval()之外的其他构造可能用于同一目的。我知道eval()是邪恶的。这是出于教育目的。

到目前为止,我发现了三个这样的结构:

  1. Function构造函数:

    var f = new Function( "alert('I am also parsed as JavaScript code.');");
    f();
    
  2. setTimeout()功能:

    setTimeout( "alert('So am I.');", 0);
    
  3. setInterval()功能:

    setInterval( "alert('Me too!');", 0);
    
  4. 是否有其他构造可用于实现此行为?如果是的话,哪些?如果不是,有任何好的参考资料来证实这一主张吗?

2 个答案:

答案 0 :(得分:2)

晦涩难懂,但只要页面尚未完成加载......

document.body.setAttribute("onLoad","alert('Hello world!');");

并非任何人都会这样做。正确?

答案 1 :(得分:1)

任何函数构造函数都可以:

console.log.constructor("alert(\"hello\")")()

(c=>Function(c))("alert (\"hello again\")")()

(_=>_('alert("hello")'))(Array.constructor)()

document.body.setAttribute("onmousemove","this.onmousemove=null;alert('hello')");
<html>
<head>
</head>
<body width="100%" hoight="100%">
hello
</body>
</html>

enter image description here