Skip to content

Commit ffba8be

Browse files
author
Lukasz Kufel
committed
Polish translation of core.
1 parent 403b6f3 commit ffba8be

File tree

3 files changed

+236
-0
lines changed

3 files changed

+236
-0
lines changed

doc/pl/core/eval.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
## Dlaczego nie należy używać `eval`
2+
3+
Funkcja `eval` uruchomi podany string jako kod JavaScript w lokalnym zasięgu (scopie).
4+
5+
var foo = 1;
6+
function test() {
7+
var foo = 2;
8+
eval('foo = 3');
9+
return foo;
10+
}
11+
test(); // 3
12+
foo; // 1
13+
14+
Niestaty `eval` zostanie wykonana w lokalnym zasięgu tylko jeżeli została wywołana
15+
**bezpośrednio** *i* nazwa wołanej funkcji równa sie `eval`.
16+
17+
var foo = 1;
18+
function test() {
19+
var foo = 2;
20+
var bar = eval;
21+
bar('foo = 3');
22+
return foo;
23+
}
24+
test(); // 2
25+
foo; // 3
26+
27+
Należy unikać stosowania `eval` **o ile to tylko możliwe**. W 99.9% przypadków można
28+
osiągnąć ten sam efekt **nie** używając `eval`.
29+
30+
### `eval` w przebraniu
31+
32+
[Funkcje wykonywane po upływie czasu](#other.timeouts) `setTimeout` i `setInterval`
33+
mogą przyjąć string jako pierwszy argument. String ten zostanie **zawsze** wykonany
34+
w globalnym zasięgu, ponieważ funkcja `eval` zostanie wywołana niebezpośrednio w tym
35+
przypadku.
36+
37+
### Problemy z bezpieczeństwem
38+
39+
Funkcja `eval` jest również problematyczna od strony bezpieczeństwa, ponieważ
40+
wykonuje **każdy** kod, który zostanie do niej przekazany i nie należy **nigdy**
41+
używać jej na stringach nieznanego lub niezaufanego pochodzenia.
42+
43+
### Wnioski
44+
45+
Funkcja `eval` nie powinna być w ogole używana, każdy kod, który ją wykorzystuje
46+
powinien zostać sprawdzony pod względem działania, wydajności i bezpieczeństwa.
47+
W przypadku gdy użycie `eval` jest niezbędne do działania, wówczas taki kod
48+
należy przemyśleć raz jeszcze i *ulepszyć* kod aby nie wymagał użycia `eval`.
49+

doc/pl/core/semicolon.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
## Automatyczne wstawianie średnika
2+
3+
Mimo, że JavaScript ma składnię podobną do języka C, to **nie** wymusza stosowania
4+
średników w kodzie źródłowym. Istnieje możliwość ich pominięcia.
5+
6+
Lecz JavaScript nie jest językiem bez średników, tak na prawdę potrzebuje
7+
średników aby zinterpretować kod źródłowy. Jednakże parser JavaScript
8+
**automatycznie** wstawia średniki o ile napotka błąd parsowania związany z
9+
brakiem średnika.
10+
11+
var foo = function() {
12+
} // błąd parsowania, oczekiwany był w tym miejscu średnik
13+
test()
14+
15+
Parser dodaje średnik, i próbuje jeszcze raz sparsować skrypt.
16+
17+
var foo = function() {
18+
}; // bez błędu parser kontynuuje
19+
test()
20+
21+
Automatyczne wstawianie średników jest uważane za jeden z **największych** błędów
22+
konstrukcji języka, ponieważ *może* ono zachowanie kodu.
23+
24+
### Jak działa wstawianie
25+
26+
Kod poniżej nie ma żadnych średników, więc parser zdecyduje, w których miejscach
27+
je wstawi.
28+
29+
(function(window, undefined) {
30+
function test(options) {
31+
log('testing!')
32+
33+
(options.list || []).forEach(function(i) {
34+
35+
})
36+
37+
options.value.test(
38+
'long string to pass here',
39+
'and another long string to pass'
40+
)
41+
42+
return
43+
{
44+
foo: function() {}
45+
}
46+
}
47+
window.test = test
48+
49+
})(window)
50+
51+
(function(window) {
52+
window.someLibrary = {}
53+
54+
})(window)
55+
56+
Poniżej znajduje się rezultat "zgadywania" parsera.
57+
58+
(function(window, undefined) {
59+
function test(options) {
60+
61+
// Nie wstaniony średnik, linie zostały połączone
62+
log('testing!')(options.list || []).forEach(function(i) {
63+
64+
}); // <- wstawiony
65+
66+
options.value.test(
67+
'long string to pass here',
68+
'and another long string to pass'
69+
); // <- wstawiony
70+
71+
return; // <- wstawiony, psując deklarację return
72+
{ // potraktowane jako definicja bloku
73+
74+
// etykieta oraz pojedyncze wyrażenie
75+
foo: function() {}
76+
}; // <- wstawiony
77+
}
78+
window.test = test; // <- wstawiony
79+
80+
// Kolejna połączona linia
81+
})(window)(function(window) {
82+
window.someLibrary = {}; // <- wstawiony
83+
84+
})(window); //<- wstawiony
85+
86+
> **Uwaga:** Parser JavaScript nie potrafił "odpowiednio" zinterpretować
87+
> deklaracji return, po którje został dodany znak nowej linii. Mimo, że
88+
> niekoniecznie jest to błąd automatycznego wstawiania średników, to może to
89+
> jednak powodować niechciane efekty uboczne
90+
91+
Parser drastycznie zmienił działanie powyższego kodu, w niektórych przypadkach
92+
**zmienił go źle**.
93+
94+
### Nawiasy
95+
96+
W przypadku, gdy w następnej linii znajduje się nawias, parser **nie** wstawi
97+
średnika.
98+
99+
log('testing!')
100+
(options.list || []).forEach(function(i) {})
101+
102+
Ten kod zostanie zmieniony w poniższą jedną linię.
103+
104+
log('testing!')(options.list || []).forEach(function(i) {})
105+
106+
Jest **bardzo** prawdopodobne, że `log` **nie** zwróci fukcji, co za tym idzie
107+
powyższy kod wyrzuci błąd `TypeError` oznajmując, że `undefined is not a
108+
function` - `undefined` nie jest funkcją.
109+
110+
### Wnioski
111+
112+
Zaleca się aby **nigdy** nie pomijać średników, pozostawiać nawias otwierający
113+
w tej samej linii co odpowiadająca mu definicja i nigdy nie pozostawiać deklaracji
114+
`if` / `else` bez nawiasów nawet jeżeli są jednolinijkowe. Wszystkie te uwagi nie
115+
tylko pomagają poprawić spójność kodu, ale również zapobiegają parser JavaScript
116+
przed zmianą działania kod.
117+

doc/pl/core/undefined.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
## `undefined` i `null`
2+
3+
JavaScript ma dwie różne wartości dla `pustych` wartości, bardziej użyteczną
4+
z tych dwóch jest `undefined`.
5+
6+
### Wartość `undefined`
7+
8+
`undefined` jest typem z dokładnie jedną wartością: `undefined`.
9+
10+
Język również definiuje globalną zmienną, która ma wartość `undefined`, zmienna
11+
ta jest nazwana `undefined`. Jednakże jest to zmienna a **nie** stała czy słowo
12+
kluczowe w języku. Oznacza to że możliwe jest nadpisanie *wartości* tej zmiennej.
13+
14+
> Uwaga ES55: `undefined` w ECMAScript 5 **nie będzie już** *nadpisywalna* w trybie
15+
> strict mode, ale jej nazwa może zostać przysłonona przez na przykład funkcję o
16+
> nazwie `undefined`.
17+
18+
Kilka przykładów kiedy wartość `undefined` jest zwracana:
19+
20+
- Dostęp do (niemodyfikowalnej) zmiennej globalnej `undefined`.
21+
- Wyjście z funkcji, która nie ma deklaracji `return`.
22+
- Deklaracja `return`, która nic jawnie nie zwraca.
23+
- Poszukiwanie nieistniejącej właściwości.
24+
- Parametr funkcji, który nie został jawnie przekazany podczas wywołania funkcji
25+
- Wszystko co zostało ustawione na wartość `undefined`
26+
27+
### Obsługa przypadku zmiany wartości `undefined`
28+
29+
Ponieważ globalna zmienna `undeined` tylko zawiera kopię prawdziwej *wartości* typu
30+
`undefined`, przypisanie nowej wartości do tej zmiennej **nie** zmienia wartości
31+
*typu* `undefined`.
32+
33+
Jednak, aby porównać coś do wartości `undefined` potrzebne jest odczytanie wartości
34+
`undefined`.
35+
36+
Aby uchronić swój kod przeciwko możliwemu nadpisaniu zmiennej `undefined`, korzysta
37+
się z powszechnej techniki dodania dodatkowego parametru do
38+
[anonimowego wrappera](#function.scopes), do którego nie zostanie przekazany
39+
argument.
40+
41+
var undefined = 123;
42+
(function(something, foo, undefined) {
43+
// undefined lokalnym zasięgu znowu
44+
// odnosi się do poprawnej wartości
45+
46+
})('Hello World', 42);
47+
48+
Kolejnym sposobem aby osiągnąć ten sam efekt jest użycie deklaracji zmiennej
49+
wewnątrz wrappera.
50+
51+
var undefined = 123;
52+
(function(something, foo) {
53+
var undefined;
54+
...
55+
56+
})('Hello World', 42);
57+
58+
Jedyną różnicą pomięcy tymi sposobami są dodatkowe 4 bajty przeznaczone na słowo
59+
kluczowe `var` i spację po nim.
60+
61+
### Zastosowanie `null`
62+
63+
Podczas gdy `undefined` w kontekście języka jest używany jak *null* w sensie
64+
tradycyjnych języków, to `null` w JavaScript (jako literał i jako typ) jest po
65+
prostu kolejnym typem danych.
66+
67+
Jest wykorzystywany we wnętrzu JavaScript (np. deklaracji końca łańcucha prototypów
68+
poprzez ustawienie `Foo.prototype = null`), ale prawie w każdym przypadku można go
69+
zastąpić przez `undefined`.
70+

0 commit comments

Comments
 (0)