Skip to content

Commit f4ddb22

Browse files
authored
Merge pull request #14 from bartek7/02-08-comparison
Comparisons
2 parents 051f376 + 4ed043c commit f4ddb22

File tree

3 files changed

+101
-99
lines changed

3 files changed

+101
-99
lines changed

1-js/02-first-steps/08-comparison/1-comparison-questions/solution.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ null == "\n0\n" → false
1010
null === +"\n0\n"false
1111
```
1212

13-
Some of the reasons:
13+
Wytłumaczenie rozwiązania:
1414

15-
1. Obviously, true.
16-
2. Dictionary comparison, hence false. `"a"` is smaller than `"p"`.
17-
3. Again, dictionary comparison, first char of `"2"` is greater than the first char of `"1"`.
18-
4. Values `null` and `undefined` equal each other only.
19-
5. Strict equality is strict. Different types from both sides lead to false.
20-
6. Similar to `(4)`, `null` only equals `undefined`.
21-
7. Strict equality of different types.
15+
1. Oczywiście true.
16+
2. Porównanie słownikowe, dlatego zwróci false. `"a"` jest mniejsze niż `"p"`
17+
3. Ponownie porównanie słownikowe, pierwszy znak `"2"` jest większy niż pierwszy znak drugiego stringu `"1"`.
18+
4. Wartości `null` i `undefined` są równe tylko ze sobą.
19+
5. Ścisła porównanie jest rygorystyczne. Obie wartości mają rózne typy, stąd `false`.
20+
6. Podobnie, jak w `(4)`, `null` i `undefined` są równe tylko ze sobą.
21+
7. Ścisłe porównanie róznych typów.

1-js/02-first-steps/08-comparison/1-comparison-questions/task.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ importance: 5
22

33
---
44

5-
# Comparisons
5+
# Porównania
66

7-
What will be the result for these expressions?
7+
Jakie będą wyniki tych wyrażeń?
88

99
```js no-beautify
1010
5 > 4
+91-89
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,96 @@
1-
# Comparisons
1+
# Porównania
22

3-
We know many comparison operators from maths:
3+
Na matematyce poznaliśmy porównania:
44

5-
- Greater/less than: <code>a &gt; b</code>, <code>a &lt; b</code>.
6-
- Greater/less than or equals: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
7-
- Equals: `a == b` (please note the double equals sign `=`. A single symbol `a = b` would mean an assignment).
8-
- Not equals. In maths the notation is <code>&ne;</code>, but in JavaScript it's written as an assignment with an exclamation sign before it: <code>a != b</code>.
5+
- Większe/mniejsze niż: <code>a &gt; b</code>, <code>a &lt; b</code>.
6+
- Większe/mniejsze niż lub równe: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
7+
- Równe: `a == b` (zauważ, że jest tutaj podwójny znak `=`. Pojedyncze użycie `a = b` oznacza przypisanie).
8+
- Nierówne. W matematyce zapiszemy to jako <code>&ne;</code>, ale w JavaScript jest to zapisane jako wykrzyknik przed znakiem równości: <code>a != b</code>.
99

10-
## Boolean is the result
10+
## Wynikiem jest Boolean
1111

12-
Like all other operators, a comparison returns a value. In this case, the value is a boolean.
12+
Jak wszystkie inne operatory porównanie zwraca wartość. W tym przypadku wartością jest Boolean.
1313

14-
- `true` -- means "yes", "correct" or "the truth".
15-
- `false` -- means "no", "wrong" or "not the truth".
14+
- `true` -- oznacza "tak", "poprawnie" albo "prawda".
15+
- `false` -- oznacza "nie", "źle" albo "fałsz".
1616

17-
For example:
17+
Na przykład:
1818

1919
```js run
20-
alert( 2 > 1 ); // true (correct)
21-
alert( 2 == 1 ); // false (wrong)
22-
alert( 2 != 1 ); // true (correct)
20+
alert( 2 > 1 ); // true (prawda)
21+
alert( 2 == 1 ); // false (fałsz)
22+
alert( 2 != 1 ); // true (prawda)
2323
```
2424

25-
A comparison result can be assigned to a variable, just like any value:
25+
Wynik porównania może być przypisany do zmiennej, jak każda inna wartość:
2626

2727
```js run
28-
let result = 5 > 4; // assign the result of the comparison
28+
let result = 5 > 4; // przypisz wynik porównania
2929
alert( result ); // true
3030
```
3131

32-
## String comparison
32+
## Porównanie łańcuchów
3333

34-
To see whether a string is greater than another, JavaScript uses the so-called "dictionary" or "lexicographical" order.
34+
Aby zobaczyć czy ciąg znaków jest większy niż inny, JavaScript używa porównania, które nazywamy "słownikowym" lub "leksykograficznym".
3535

36-
In other words, strings are compared letter-by-letter.
36+
Innymi słowy, łańcuchy porównywane są litera po literze.
3737

38-
For example:
38+
Na przykład:
3939

4040
```js run
4141
alert( 'Z' > 'A' ); // true
42-
alert( 'Glow' > 'Glee' ); // true
43-
alert( 'Bee' > 'Be' ); // true
42+
alert( 'Brat' > 'Brak' ); // true
43+
alert( 'Jan' > 'Ja' ); // true
4444
```
4545

46-
The algorithm to compare two strings is simple:
46+
Algorytm porównuje dwa ciągi w prosty sposób:
4747

48-
1. Compare the first character of both strings.
49-
2. If the first character from the first string is greater (or less) than the other string's, then the first string is greater (or less) than the second. We're done.
50-
3. Otherwise, if both strings' first characters are the same, compare the second characters the same way.
51-
4. Repeat until the end of either string.
52-
5. If both strings end at the same length, then they are equal. Otherwise, the longer string is greater.
48+
1. Porównaj pierwszy znak w obu łańcuchach .
49+
2. Jeśli pierwszy znak w pierwszym ciągu jest większy (lub mniejszy) niż w drugim łańcuchu, wtedy pierwszy ciąg jest większy (lub mniejszy). Porównanie zakończone.
50+
3. Jeśli pierwsze znaki są takie same zrób porównanie dla kolejnego znaku w ten sam sposób jak w punkcie nr 2.
51+
4. Powtarzaj dopóki nie nastapi koniec łańcucha znaków.
52+
5. Jeśli oba ciągi mają taką samą długość, to są równe. W przeciwnym przypadku dłuższy łańcuch jest większy.
5353

54-
In the examples above, the comparison `'Z' > 'A'` gets to a result at the first step while the strings `"Glow"` and `"Glee"` are compared character-by-character:
54+
W powyższych przypadkach porównanie `'Z' > 'A'` zwróci rezultat w pierwszym podejściu. Porównanie `"Brat"` z `"Brak"` będzie porównywane znak po znaku:
5555

56-
1. `G` is the same as `G`.
57-
2. `l` is the same as `l`.
58-
3. `o` is greater than `e`. Stop here. The first string is greater.
56+
1. `B` jest takie same jak `B`.
57+
2. `r` jest takie same jak `r`.
58+
3. `a` jest takie same jak `a`.
59+
3. `t` jest większe niż `k`. Zatrzymaj tutaj. Pierwszy string jest większy.
5960

60-
```smart header="Not a real dictionary, but Unicode order"
61-
The comparison algorithm given above is roughly equivalent to the one used in dictionaries or phone books, but it's not exactly the same.
61+
```smart header="Nie do końca słownikowa, bo kolejność wg Unicode"
62+
Podany powyżej przykład jest prawie taki sam jak algorytm używany w słownikach lub książkach telefonicznych. Nie jest jednak dokładnie taki sam.
6263
63-
For instance, case matters. A capital letter `"A"` is not equal to the lowercase `"a"`. Which one is greater? The lowercase `"a"`. Why? Because the lowercase character has a greater index in the internal encoding table JavaScript uses (Unicode). We'll get back to specific details and consequences of this in the chapter <info:string>.
64+
Na przykład wielkość ma znaczenie. Duża litera `"A"` nie jest równa małej literze `"a"`. Która jest większa? Mała litera `"a"`. Dlaczego? Ponieważ małe litery mają większy index w wewnętrznej tabeli kodowania znaków (Unicode), której używa JavaScript. Wrócimy do tego ze szczegółami w rozdziale <info:string>.
6465
```
6566

66-
## Comparison of different types
67+
## Porównania wartości różnego typu
6768

68-
When comparing values of different types, JavaScript converts the values to numbers.
69+
Kiedy porównujemy wartości różnego typu JavaScript konwertuje te wartości na liczby.
6970

70-
For example:
71+
Na przykład:
7172

7273
```js run
73-
alert( '2' > 1 ); // true, string '2' becomes a number 2
74-
alert( '01' == 1 ); // true, string '01' becomes a number 1
74+
alert( '2' > 1 ); // true, łańcuch '2' staje się numerem 2
75+
alert( '01' == 1 ); // true, łańcuch '01' staje się numerem 1
7576
```
7677

77-
For boolean values, `true` becomes `1` and `false` becomes `0`.
78+
W przypadku wartości logicznych, `true` staje się `1`, a `false` staje się `0`.
7879

79-
For example:
80+
Na przykład:
8081

8182
```js run
8283
alert( true == 1 ); // true
8384
alert( false == 0 ); // true
8485
```
8586

86-
````smart header="A funny consequence"
87-
It is possible that at the same time:
87+
````smart header="Zabawna zależność"
88+
Jest możliwe, aby w tym samym czasie:
8889
89-
- Two values are equal.
90-
- One of them is `true` as a boolean and the other one is `false` as a boolean.
90+
- Dwie wartości były równe.
91+
- Jedna z nich będzie `true` jako wartość logiczna, natomiast druga `false` jako wartość logiczna.
9192
92-
For example:
93+
Na przykład:
9394
9495
```js run
9596
let a = 0;
@@ -101,109 +102,110 @@ alert( Boolean(b) ); // true
101102
alert(a == b); // true!
102103
```
103104
104-
From JavaScript's standpoint, this result is quite normal. An equality check converts values using the numeric conversion (hence `"0"` becomes `0`), while the explicit `Boolean` conversion uses another set of rules.
105+
Z punkty widzenia JavaScript taki rezultat jest oczekiwany i normalny. Porównanie konwertuje wartości na typ liczbowy (więc łańcuch `"0"` zostaje `0`), podczas gdy porównanie `Boolean` konwertuje te wartości w inny sposób.
105106
````
106107

107-
## Strict equality
108+
## Operator identyczności
108109

109-
A regular equality check `==` has a problem. It cannot differentiate `0` from `false`:
110+
Operator równości `==` ma jedną wadę. Nie potrafi odróżnić `0` od `false`.
110111

111112
```js run
112113
alert( 0 == false ); // true
113114
```
114115

115-
The same thing happens with an empty string:
116+
To samo się stanie gdy porównamy pusty łańcuch:
116117

117118
```js run
118119
alert( '' == false ); // true
119120
```
120121

121-
This happens because operands of different types are converted to numbers by the equality operator `==`. An empty string, just like `false`, becomes a zero.
122+
Dzieje się tak, ponieważ operandy różnych typów są konwertowane do typu liczbowego podczas użycia `==`. Pusty łańcuch, a także `false` stają się 0.
122123

123-
What to do if we'd like to differentiate `0` from `false`?
124+
Co powinniśmy zrobić, aby odróżnić `0` od `false`?
124125

125-
**A strict equality operator `===` checks the equality without type conversion.**
126+
**Operator identyczności `===` sprawdza równość bez konwersji typu.**
126127

127-
In other words, if `a` and `b` are of different types, then `a === b` immediately returns `false` without an attempt to convert them.
128+
Innymi słowy, jeśli `a` i `b` są różnego typu wtedy `a === b` natychmiastowo zwróci `false` bez próby ich wcześniejszej konwersji.
128129

129-
Let's try it:
130+
Spróbujmy więc:
130131

131132
```js run
132-
alert( 0 === false ); // false, because the types are different
133+
alert( 0 === false ); // false, ponieważ typy są różne
133134
```
134135

135-
There is also a "strict non-equality" operator `!==` analogous to `!=`.
136+
Istnieje również "operator nieidentyczności" `!==` analogiczny do `!=`.
136137

137-
The strict equality operator is a bit longer to write, but makes it obvious what's going on and leaves less room for errors.
138+
Operator identyczności jest nieco dłuższy do zapisania, ale czyni porównanie oczywistym i nie zostawia miejsca na błędy.
138139

139-
## Comparison with null and undefined
140+
## Porównania z null i undefined
140141

141-
There's a non-intuitive behavior when `null` or `undefined` are compared to other values.
142+
Porównywanie wartości `null` lub `undefined` z innymi wartościami jest nieintuicyjne.
142143

143-
For a strict equality check `===`
144-
: These values are different, because each of them is a different type.
144+
145+
Dla sprawdzenia identyczności `===`
146+
: Te wartości są różne, ponieważ każda jest innego typu.
145147

146148
```js run
147149
alert( null === undefined ); // false
148150
```
149151

150-
For a non-strict check `==`
151-
: There's a special rule. These two are a "sweet couple": they equal each other (in the sense of `==`), but not any other value.
152+
Dla sprawdzenia równości `==`
153+
: Istnieje specjalna reguła. Te dwie wartości są "słodką parą": są równe sobie (w sensie `==`), ale nie są równe innej wartości.
152154

153155
```js run
154156
alert( null == undefined ); // true
155157
```
156158

157-
For maths and other comparisons `< > <= >=`
158-
: `null/undefined` are converted to numbers: `null` becomes `0`, while `undefined` becomes `NaN`.
159+
W matematyce i innych porównaniach `< > <= >=`
160+
: `null/undefined` są skonwertowane do liczb: `null` staje się `0`, natomiast `undefined` staje się `NaN`.
159161

160-
Now let's see some funny things that happen when we apply these rules. And, what's more important, how to not fall into a trap with them.
162+
Zobaczmy kilka ciekawych rzeczy, które się dzieją gdy zastosujemy te reguły. I co najważniejsze, jak nie wpaść w tarapaty używając ich.
161163

162-
### Strange result: null vs 0
164+
### Dziwny rezultat: null vs 0
163165

164-
Let's compare `null` with a zero:
166+
Porównajmy `null` z zerem:
165167

166168
```js run
167169
alert( null > 0 ); // (1) false
168170
alert( null == 0 ); // (2) false
169171
alert( null >= 0 ); // (3) *!*true*/!*
170172
```
171173

172-
Mathematically, that's strange. The last result states that "`null` is greater than or equal to zero", so in one of the comparisons above it must be `true`, but they are both false.
174+
Z matematycznego punktu widzenia jest to dziwne. Ostatni rezultat, w którym "`null` jest większe lub równe zero" zwraca `true`, podczas gdy oba wcześniejsze zwracają `false`, wydaje się, że również powinno być `false`, a jest `true`.
173175

174-
The reason is that an equality check `==` and comparisons `> < >= <=` work differently. Comparisons convert `null` to a number, treating it as `0`. That's why (3) `null >= 0` is true and (1) `null > 0` is false.
176+
Powodem takiego wyniku jest to, że znak `==` i porównania `> < >= <=` nie działają w ten sam sposób. Porównania konwertują `null` do liczby traktując go jako `0`. Dlatego właśnie (3) `null >= 0` jest true i (1) `null > 0` jest false.
175177

176-
On the other hand, the equality check `==` for `undefined` and `null` is defined such that, without any conversions, they equal each other and don't equal anything else. That's why (2) `null == 0` is false.
178+
Z drugiej strony użycie `==` dla `undefined` oraz `null` jest zdefiniowane bez żadnych konwersji i są równe tylko sobie i niczemu innemu. I właśnie dlatego w przykładzie (2) `null == 0` jest false.
177179

178-
### An incomparable undefined
180+
### Nieporównywalny undefined
179181

180-
The value `undefined` shouldn't be compared to other values:
182+
Wartość `undefined` nie powinna być porównywana z innymi wartościami:
181183

182184
```js run
183185
alert( undefined > 0 ); // false (1)
184186
alert( undefined < 0 ); // false (2)
185187
alert( undefined == 0 ); // false (3)
186188
```
187189

188-
Why does it dislike zero so much? Always false!
190+
Dlaczego nie lubi nawet zera? Bo zawsze jest false!
189191

190-
We get these results because:
192+
Dostaliśmy takie rezultaty ponieważ:
191193

192-
- Comparisons `(1)` and `(2)` return `false` because `undefined` gets converted to `NaN` and `NaN` is a special numeric value which returns `false` for all comparisons.
193-
- The equality check `(3)` returns `false` because `undefined` only equals `null`, `undefined`, and no other value.
194+
- Porównanie `(1)` i `(2)` zwraca `false` ponieważ `undefined` zostaje skonwertowane do `NaN` i `NaN` jest specjalną numeryczną wartością, która zawsze zwraca `false` dla wszystkich porównań.
195+
- Sprawdzanie równości `(3)` zwraca `false` ponieważ `undefined` jest równe tylko `null`, `undefined` i żadnej innej wartości.
194196

195-
### Evade problems
197+
### Unikanie problemów
196198

197-
Why did we go over these examples? Should we remember these peculiarities all the time? Well, not really. Actually, these tricky things will gradually become familiar over time, but there's a solid way to evade problems with them:
199+
Dlaczego w ogóle przeszliśmy przez te przykłady? Czy powinniśmy pamiętać o tych osobliwych rzeczach cały czas? Nie do końca. Tak właściwie to te podstępne rzeczy staną się jasne z czasem, ale jest jeden porządny sposób na uniknięcie związanych z nimi problemów:
198200

199-
Just treat any comparison with `undefined/null` except the strict equality `===` with exceptional care.
201+
Po prostu traktuj każde porównanie z `undefined/null` używając znaku ścisłej identyczności `===` zachowując wszelkie środki ostrożności.
200202

201-
Don't use comparisons `>= > < <=` with a variable which may be `null/undefined`, unless you're really sure of what you're doing. If a variable can have these values, check for them separately.
203+
Nie używaj porównań `>= > < <=` ze zmiennymi, które mogą być `null/undefined`. Chyba że wiesz co robisz. Jeśli zmienna może mieć te wartości sprawdź je oddzielnie.
202204

203-
## Summary
205+
## Podsumowanie
204206

205-
- Comparison operators return a boolean value.
206-
- Strings are compared letter-by-letter in the "dictionary" order.
207-
- When values of different types are compared, they get converted to numbers (with the exclusion of a strict equality check).
208-
- The values `null` and `undefined` equal `==` each other and do not equal any other value.
209-
- Be careful when using comparisons like `>` or `<` with variables that can occasionally be `null/undefined`. Checking for `null/undefined` separately is a good idea.
207+
- Operatory porównania zwracają wartość typu logicznego (true lub false).
208+
- Łańcuchy znaków porównywane są litera po literze w "słownikowej" kolejności.
209+
- Jeśli porównujemy wartości różnych typów, zostaną one skonwertowane do liczby (chyba, że użyjemy operatora ścisłej identyczności).
210+
- Wartości `null` i `undefined` są równe sobie `==` i są różne od każdej innej wartości.
211+
- Bądź ostrożny gdy używasz porównac takich jak `>` lub `<` ze zmiennymi, które mogą być `null/undefined`. Oddzielne sprawdzanie dla `null/undefined` jest dobrym rozwiązaniem.

0 commit comments

Comments
 (0)