Skip to content

Commit a3d66cd

Browse files
authored
Merge pull request #210 from otmon76/1.14.2
Eval: run a code string
2 parents d014c53 + 5442317 commit a3d66cd

File tree

3 files changed

+49
-49
lines changed

3 files changed

+49
-49
lines changed
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
Let's use `eval` to calculate the maths expression:
1+
K výpočtu matematického výrazu použijme `eval`:
22

33
```js demo run
4-
let expr = prompt("Type an arithmetic expression?", '2*3+2');
4+
let výraz = prompt("Zadejte aritmetický výraz:", '2*3+2');
55

6-
alert( eval(expr) );
6+
alert( eval(výraz) );
77
```
88

9-
The user can input any text or code though.
9+
Uživatel však může zadat libovolný text nebo kód.
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+
Abychom všechno zabezpečili a omezili se jen na aritmetiku, můžeme zkontrolovat `výraz` pomocí [regulárního výrazu](info:regular-expressions), aby směl obsahovat jen číslice a operátory.

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+
# Kalkulátor
66

7-
Create a calculator that prompts for an arithmetic expression and returns its result.
7+
Vytvořte kalkulátor, který se zeptá na aritmetický výraz a vrátí jeho výsledek.
88

9-
There's no need to check the expression for correctness in this task. Just evaluate and return the result.
9+
V této úloze není třeba ověřovat správnost výrazu. Jenom ho vyhodnoťte a vraťte výsledek.
1010

1111
[demo]

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

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
1-
# Eval: run a code string
1+
# Eval: spuštění řetězce kódu
22

3-
The built-in `eval` function allows to execute a string of code.
3+
Zabudovaná funkce `eval` nám umožňuje spustit řetězec kódu.
44

5-
The syntax is:
5+
Syntaxe je:
66

77
```js
8-
let result = eval(code);
8+
let výsledek = eval(kód);
99
```
1010

11-
For example:
11+
Například:
1212

1313
```js run
14-
let code = 'alert("Hello")';
15-
eval(code); // Hello
14+
let kód = 'alert("Ahoj")';
15+
eval(kód); // Ahoj
1616
```
1717

18-
A string of code may be long, contain line breaks, function declarations, variables and so on.
18+
Řetězec kódu může být dlouhý, může obsahovat konce řádku, deklarace funkcí, proměnné a podobně.
1919

20-
The result of `eval` is the result of the last statement.
20+
Výsledkem funkce `eval` je výsledek posledního příkazu.
2121

22-
For example:
22+
Příklad:
2323
```js run
24-
let value = eval('1+1');
25-
alert(value); // 2
24+
let hodnota = eval('1+1');
25+
alert(hodnota); // 2
2626
```
2727

2828
```js run
29-
let value = eval('let i = 0; ++i');
30-
alert(value); // 1
29+
let hodnota = eval('let i = 0; ++i');
30+
alert(hodnota); // 1
3131
```
3232

33-
The eval'ed code is executed in the current lexical environment, so it can see outer variables:
33+
Vyhodnocovaný kód je spouštěn v aktuálním lexikálním prostředí, takže vidí vnější proměnné:
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+
Může vnější proměnné také měnit:
5050

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

57-
In strict mode, `eval` has its own lexical environment. So functions and variables, declared inside eval, are not visible outside:
57+
Ve striktním režimu má `eval` své vlastní lexikální prostředí, takže funkce a proměnné deklarované uvnitř `eval` nejsou viditelné zvenčí:
5858

5959
```js untrusted refresh run
60-
// reminder: 'use strict' is enabled in runnable examples by default
60+
// pamatujte: 'use strict' je ve spustitelných příkladech standardně zapnuté
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 (taková proměnná neexistuje)
65+
// funkce f rovněž není viditelná
6666
```
6767

68-
Without `use strict`, `eval` doesn't have its own lexical environment, so we would see `x` and `f` outside.
68+
Bez `use strict` nemá `eval` své vlastní lexikální prostředí, takže bychom `x` a `f` venku viděli.
6969

70-
## Using "eval"
70+
## Použití „eval
7171

72-
In modern programming `eval` is used very sparingly. It's often said that "eval is evil".
72+
V moderním programování se `eval` používá velmi vzácně. Často se říká, že „eval je zlo“ (anglicky „eval is evil“).
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+
Důvod je jednoduchý: před dávnými, dávnými časy byl JavaScript mnohem slabší jazyk a mnoho věcí bylo možné provést jedině pomocí `eval`. Ale tahle doba pominula už před deseti lety.
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+
V současnosti není téměř žádný důvod, proč `eval` používat. Pokud ho někdo používá, je velká šance, že ho lze nahradit nějakým moderním jazykovým konstruktem nebo [JavaScriptovým modulem](info:modules).
7777

78-
Please note that its ability to access outer variables has side-effects.
78+
Prosíme všimněte si, že jeho schopnost přistupovat k vnějším proměnným má vedlejší efekty.
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+
Minifikátory kódu (nástroje používané před odesláním JS do produkce, aby jej zkomprimovaly) přejmenovávají lokální proměnné na kratší (např. `a`, `b` atd.), aby kód zkrátily. To je obvykle bezpečné, ale při použití `eval` ne, protože vyhodnocovaný řetězec kódu může k lokálním proměnným přistupovat. Minifikátory tedy u proměnných, které mohou být viditelné z `eval`, toto přejmenování neprovádějí. To negativně ovlivňuje poměr komprese kódu.
8181

82-
Using outer local variables inside `eval` is also considered a bad programming practice, as it makes maintaining the code more difficult.
82+
Rovněž používání vnějších lokálních proměnných uvnitř `eval` se považuje za špatnou programátorskou praktiku, protože ztěžuje údržbu kódu.
8383

84-
There are two ways how to be totally safe from such problems.
84+
Existují dva způsoby, jak být před takovými problémy zcela v bezpečí.
8585

86-
**If eval'ed code doesn't use outer variables, please call `eval` as `window.eval(...)`:**
86+
**Jestliže vyhodnocovaný kód nepoužívá vnější proměnné, prosíme volejte `eval` jako `window.eval(...)`:**
8787

88-
This way the code is executed in the global scope:
88+
Tímto způsobem bude kód spuštěn v globálním rozsahu platnosti:
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 (globální proměnná)
9595
}
9696
```
9797

98-
**If eval'ed code needs local variables, change `eval` to `new Function` and pass them as arguments:**
98+
**Jestliže vyhodnocovaný kód potřebuje lokální proměnné, změňte `eval` na `new Function` a předejte je jako argumenty:**
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+
Konstrukt `new Function` je vysvětlen v kapitole <info:new-function>. Vytvoří funkci z řetězce, rovněž v globálním rozsahu platnosti. Funkce tedy neuvidí lokální proměnné. Je však mnohem čistší předat je explicitně jako argumenty, tak jako v uvedeném příkladu.
107107

108-
## Summary
108+
## Shrnutí
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+
Volání `eval(kód)` spustí řetězec kódu a vrátí výsledek posledního příkazu.
111+
- V moderním JavaScriptu se používá málokdy, jelikož obvykle není zapotřebí.
112+
- Může přistupovat k vnějším lokálním proměnným. To se považuje za špatnou praktiku.
113+
- K vyhodnocení kódu v globálním rozsahu platnosti místo něj použijte `window.eval(kód)`.
114+
- Nebo, jestliže váš kód potřebuje data z vnějšího rozsahu, použijte `new Function` a předejte je jako argumenty.

0 commit comments

Comments
 (0)