Skip to content

Commit 80c8685

Browse files
authored
Merge pull request #303 from joaquinelio/jeval
Eval: run a code string
2 parents 611f989 + 9f5e957 commit 80c8685

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
Let's use `eval` to calculate the maths expression:
1+
Usemos `eval` para calcular la expresión matemática:
22

33
```js demo run
4-
let expr = prompt("Type an arithmetic expression?", '2*3+2');
4+
let expr = prompt("Escribe una expresión matemática:", '2*3+2');
55

66
alert( eval(expr) );
77
```
88

9-
The user can input any text or code though.
9+
Aunque el usuario puede ingresar cualquier texto o código.
1010

11-
To make things safe, and limit it to arithmetics only, we can check the `expr` using a [regular expression](info:regular-expressions), so that it only may contain digits and operators.
11+
Para hacer las cosas seguras, y limitarlo a aritmética solamente, podemos verificar `expr` usando una [expresión regular](info:regular-expressions) que solo pueda contener dígitos y operadores.

1-js/99-js-misc/02-eval/1-eval-calculator/task.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ importance: 4
22

33
---
44

5-
# Eval-calculator
5+
# Calculadora-eval
66

7-
Create a calculator that prompts for an arithmetic expression and returns its result.
7+
Crea una calculadora que pida una expresión aritmética y devuelva su resultado.
88

9-
There's no need to check the expression for correctness in this task. Just evaluate and return the result.
9+
No es necesario verificar que la expresión sea correcta en esta tarea. Simplemente que evalue y devuelva el resultado.
1010

1111
[demo]

1-js/99-js-misc/02-eval/article.md

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
# Eval: run a code string
1+
# Eval: ejecutando una cadena de código
22

3-
The built-in `eval` function allows to execute a string of code.
3+
La función incorporada `eval` permite ejecutar una cadena de código.
44

5-
The syntax is:
5+
La sintaxis es:
66

77
```js
88
let result = eval(code);
99
```
1010

11-
For example:
11+
Por ejemplo:
1212

1313
```js run
1414
let code = 'alert("Hello")';
1515
eval(code); // Hello
1616
```
1717

18-
A string of code may be long, contain line breaks, function declarations, variables and so on.
18+
Una cadena de código puede ser larga, contener cortes de línea, declaración de funciones, variables y así.
1919

20-
The result of `eval` is the result of the last statement.
20+
El resultado de `eval` es el resultado de la última sentencia.
2121

22-
For example:
22+
Por ejemplo:
2323
```js run
2424
let value = eval('1+1');
2525
alert(value); // 2
@@ -30,7 +30,7 @@ let value = eval('let i = 0; ++i');
3030
alert(value); // 1
3131
```
3232

33-
The eval'ed code is executed in the current lexical environment, so it can see outer variables:
33+
El código evaluado es ejecutado en el entorno léxico presente, entonces podemos ver sus variables externas:
3434

3535
```js run no-beautify
3636
let a = 1;
@@ -46,69 +46,69 @@ function f() {
4646
f();
4747
```
4848

49-
It can change outer variables as well:
49+
También puede modificar variables externas:
5050

5151
```js untrusted refresh run
5252
let x = 5;
5353
eval("x = 10");
54-
alert(x); // 10, value modified
54+
alert(x); // 10, valor modificado
5555
```
5656

57-
In strict mode, `eval` has its own lexical environment. So functions and variables, declared inside eval, are not visible outside:
57+
En modo estricto, `eval` tiene su propio entorno léxico. Entonces funciones y variables declaradas dentro de eval no son visibles fuera:
5858

5959
```js untrusted refresh run
60-
// reminder: 'use strict' is enabled in runnable examples by default
60+
// recordatorio: 'use strict' está habilitado en los ejemplos ejecutables por defecto
6161

6262
eval("let x = 5; function f() {}");
6363

64-
alert(typeof x); // undefined (no such variable)
65-
// function f is also not visible
64+
alert(typeof x); // undefined (no existe tal variable)
65+
// la función f tampoco es visible
6666
```
6767

68-
Without `use strict`, `eval` doesn't have its own lexical environment, so we would see `x` and `f` outside.
68+
Sin `use strict`, `eval` no tiene su propio entorno léxico, entonces podemos ver `x` y `f` afuera.
6969

70-
## Using "eval"
70+
## Usando "eval"
7171

72-
In modern programming `eval` is used very sparingly. It's often said that "eval is evil".
72+
En programación moderna `eval` es usado muy ocasionalmente. Se suele decir que "eval is evil" - juego de palabras en inglés que significa en español: "eval es malvado".
7373

74-
The reason is simple: long, long time ago JavaScript was a much weaker language, many things could only be done with `eval`. But that time passed a decade ago.
74+
La razón es simple: largo, largo tiempo atrás JavaScript era un lenguaje mucho más débil, muchas cosas podían ser concretadas solamente con `eval`. Pero aquel tiempo pasó hace una década.
7575

76-
Right now, there's almost no reason to use `eval`. If someone is using it, there's a good chance they can replace it with a modern language construct or a [JavaScript Module](info:modules).
76+
Ahora casi no hay razones para usar `eval`. Si alguien lo está usando, hay buena chance de que pueda ser reemplazado con una construcción moderna del lenguaje o un [Módulo JavaScript](info:modules).
7777

78-
Please note that its ability to access outer variables has side-effects.
78+
Por favor ten en cuenta que su habilidad para acceder a variables externas tiene efectos colaterales.
7979

80-
Code minifiers (tools used before JS gets to production, to compress it) rename local variables into shorter ones (like `a`, `b` etc) to make the code smaller. That's usually safe, but not if `eval` is used, as local variables may be accessed from eval'ed code string. So minifiers don't do that renaming for all variables potentially visible from `eval`. That negatively affects code compression ratio.
80+
Los Code minifiers (minimizadores de código, herramientas usadas antes de poner JS en producción para comprimirlo) renombran las variables locales acortándolas (como `a`, `b` etc) para achicar el código. Usualmente esto es seguro, pero no si `eval` es usado porque las variables locales puden ser accedidas desde la cadena de código evaluada. Por ello los minimizadores no hacen tal renombado en todas las variables potencialmente visibles por `eval`. Esto afecta negativamente en el índice de compresión.
8181

82-
Using outer local variables inside `eval` is also considered a bad programming practice, as it makes maintaining the code more difficult.
82+
El uso de variables locales dentro de `eval` es también considerado una mala práctica de programación, porque hace el mantenimiento de código más difícil.
8383

84-
There are two ways how to be totally safe from such problems.
84+
Hay dos maneras de estar asegurado frente a tales problemas.
8585

86-
**If eval'ed code doesn't use outer variables, please call `eval` as `window.eval(...)`:**
86+
**Si el código evaluado no usa variables externas, por favor llama `eval` como `window.eval(...)`:**
8787

88-
This way the code is executed in the global scope:
88+
De esta manera el código es ejecutado en el entorno global:
8989

9090
```js untrusted refresh run
9191
let x = 1;
9292
{
9393
let x = 5;
94-
window.eval('alert(x)'); // 1 (global variable)
94+
window.eval('alert(x)'); // 1 (variable global)
9595
}
9696
```
9797

98-
**If eval'ed code needs local variables, change `eval` to `new Function` and pass them as arguments:**
98+
**Si el código evaluado necesita variables locales, cambia `eval` por `new Function` y pásalas como argumentos:**
9999

100100
```js run
101101
let f = new Function('a', 'alert(a)');
102102

103103
f(5); // 5
104104
```
105105

106-
The `new Function` construct is explained in the chapter <info:new-function>. It creates a function from a string, also in the global scope. So it can't see local variables. But it's so much clearer to pass them explicitly as arguments, like in the example above.
106+
La contrucción `new Function` es explicada en el capítulo <info:new-function>. Esta crea una función desde una cadena, también en el entorno global, y así no puede ver las variables locales. Pero es mucho más claro pasarlas explícitamente como argumentos como en el ejemplo de arriba.
107107

108-
## Summary
108+
## Resumen
109109

110-
A call to `eval(code)` runs the string of code and returns the result of the last statement.
111-
- Rarely used in modern JavaScript, as there's usually no need.
112-
- Can access outer local variables. That's considered bad practice.
113-
- Instead, to `eval` the code in the global scope, use `window.eval(code)`.
114-
- Or, if your code needs some data from the outer scope, use `new Function` and pass it as arguments.
110+
Un llamado a `eval(code)` ejecuta la cadena de código y devuelve el resultado de la última sentencia.
111+
- Es raramente usado en JavaScript moderno, y usualmente no es necesario.
112+
- Puede acceder a variables locales externas. Esto es considerado una mala práctica.
113+
- En su lugar, para evaluar el código en el entorno global, usa `window.eval(code)`.
114+
- O, si tu código necesita algunos datos de el entorno externo, usa `new Function` y pásalos como argumentos.

0 commit comments

Comments
 (0)