Este articulo necesita una revisión editorial. Cómo puedes ayudar.
Resumen
Evalúa una cadena de código JavaScript sin referenciar a un objeto en particular.
Sintaxis
eval(cadena [,objeto ])
Parámetros
cadena
- Una cadena que representa una expresión, sentencia o secuencia de sentencias en JavaScript. La expresión puede incluir variables y propiedades de objetos existentes.
objeto
- Un argumento opcional; si se especifica, la evaluación se restringe al contexto del objeto especificado.
Descripción
eval
es una función de alto nivel y no está asociada a ningún objeto.
El argumento de la función eval
es una cadena. Si la cadena representa una expresión, eval
evalúa la expresión. Si el argumento representa una o más sentencias JavaScript, eval
ejecuta las sentencias. No llame a eval
para evaluar una expresión aritmética; JavaScript evalúa las expresiones aritméticas automáticamente.
Si construye una expresión aritmética como una cadena, puede usar eval
para evaluarla más tarde. Por ejemplo, suponga que tiene la variable x
. Puede posponer la evaluación de una expresión que implique a x
mediante la asignación a la cadena del valor de la expresión, diciendo "3 * x + 2
", a la variable, y llamando entonces a eval
posteriormente en el script.
Si el argumento de eval
no es una cadena, eval
devuelve el argumento sin cambios. En el siguiente ejemplo, se especifica el constructor String
, y eval
devuelve un objeto String
en vez de evaluar la cadena.
eval(new String("2 + 2")); // devuelve un objeto String que contiene "2 + 2" eval("2 + 2"); // devuelve 4
Puede trabajar sobre esta limitación de una manera genérica usando toString
.
var expresion = new String("2 + 2"); eval(expresion.toString());
No puede usar la función eval
indirectamente mediante la invocación de un nombre diferente a eval
; si lo hace podría ocurrir un error en tiempo de ejecución. Por ejemplo, no debería usar el siguiente código:
var x = 2; var y = 4; var miEval = eval; miEval("x + y");
No debería utilizar eval
para convertir los nombres de propiedades en propiedades. Por ejemplo, considere el siguiente ejemplo. La función getNombreCampo(n)
devuelve el nombre del elemento del formulario especificado como una cadena. La primera sentencia asigna el valor de cadena del tercer elemento del formulario a la variable campo
. La segunda sentencia utiliza eval
para mostrar el valor del elemento del formulario.
var campo = getNombreCampo(3); document.write("El campo llamado ", campo, " tiene un valor de ", eval(campo + ".value"));
Sin embargo, aquí eval
no es necesario. De hecho, su uso está desaconsejado. En cambio, use los operadores de miembro, que son mucho más rápidos:
var campo = getFieldName(3); document.write("El campo llamado ", campo, " tiene un valor de ", campo[valor]);
Compatibilidad Hacia Atrás
JavaScript 1.3 y anteriores
Puede usar eval
indirectamente, aunque ésto está desaconsejado.
JavaScript 1.1
eval
también es un método de todos los objetos.
Ejemplos
Los siguientes ejemplos muestran el resultado usando document.write
. En JavaScript del lado servidor, puede mostrar el mismo resultado llamando a la función write
en vez de document.write
.
Ejemplo: Usando eval
En el siguiente código, las dos sentencias que contienen eval
devuelven 42. La primera evalúa la cadena "x + y + 1
"; la segunda evalúa la cadena "42
".
var x = 2; var y = 39; var z = "42"; eval("x + y + 1"); // returns 42 eval(z); // returns 42
Ejemplo: Usando eval
para evaluar una cadena de sentencias de JavaScript
El siguiente ejemplo utiliza eval
para evaluar una cadena str
. Esta cadena consiste en sentencias de JavaScript que abren un diálogo Alert
y asignan a z
un valor de 42 si x
es cinco, y asigna 0 a z
en caso contrario. Cuando se ejecuta la segunda sentencia, eval
provoca que estas sentencias se realicen, y también evalúa el conjunto de sentencias y devuelve el valor asignado a z
.
var str = "if (x == 5) {alert('z is 42'); z = 42;} else z = 0; "; document.write("<P>z es ", eval(str));
Valor Devuelto
eval
devuelve el valor de la última expresión evaluada.
var str = "if ( a ) { 1+1; } else { 1+2; }" var a = true; var b = eval(str); // returns 2 alert("b is : " + b); a = false; b = eval(str); // returns 3 alert("b is : " + b);