2010-08-16 8 views
12

si no estoy equivocada eval ejecuta código válido en una cadena dada¿Por qué la gente dice que javascript eval() es malo pero no objeta contra setTimeout y setInterval, etc.?

eval("alert('hey')"); 

y

setTimeout("alert('hey')",1000); 

hace casi lo mismo, sólo que con un temporizador. se establece el tiempo de espera tan arriesgado como eval?

+3

Buena pregunta :) Y supongo que la respuesta es sí Más aquí http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not- evil – mplungjan

Respuesta

20

Diría que escuchas las mismas objeciones. setTimeout (con cadena y no parámetros de función) es prácticamente lo mismo que eval.

Si es posible,

setTimeout(function(){ alert ("hey") ; }, 1000); 
+0

No hay razón por la que no debería ser posible –

+8

+1 por proporcionar un ejemplo del uso correcto de 'setTimeout'. La capacidad de pasar un argumento de cadena probablemente haya hecho más daño que bien a la forma en que las personas usan javascript –

+0

+1 Parece que mi código necesita algunos cambios de seguridad;) gracias, mmm, no estaba exactamente consciente de que puedes usar tiempos de espera de esta manera también hmmm –

4

Porque cuando las personas dicen "eval", quieren decir "eval y cualquier función que sea más o menos equivalente a eval", pero la primera es mucho más corta de decir. Así que la respuesta a su pregunta es sí, es tan arriesgado.

Cuestiones relacionadas