Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 50eaac2

Browse files
authoredMay 17, 2022
Merge pull request #75 from otmon76/1.2.9
Comparisons
2 parents 2d864d3 + 6e148cd commit 50eaac2

File tree

3 files changed

+104
-104
lines changed

3 files changed

+104
-104
lines changed
 

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
```js no-beautify
44
5 > 4true
5-
"apple" > "pineapple"false
5+
"ananas" > "jablko"false
66
"2" > "12"true
77
undefined == nulltrue
88
undefined === nullfalse
99
null == "\n0\n"false
1010
null === +"\n0\n"false
1111
```
1212

13-
Some of the reasons:
13+
Některé z důvodů:
1414

15-
1. Obviously, true.
16-
2. Dictionary comparison, hence false. `"a"` is smaller than `"p"`.
17-
3. Again, dictionary comparison, first char `"2"` is greater than the first char `"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. Samozřejmě true.
16+
2. Slovníkové porovnání, proto false. `"a"` je menší než `"j"`.
17+
3. Opět slovníkové porovnání, první znak `"2"` je větší než první znak `"1"`.
18+
4. Hodnoty `null` a `undefined` se rovnají jedině sobě navzájem.
19+
5. Striktní rovnost je striktní. Různé typy na obou stranách vedou k výsledku false.
20+
6. Obdobně jako ve `(4)` se `null` rovná jedině `undefined`.
21+
7. Striktní rovnost s různými typy vrací false.

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

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

33
---
44

5-
# Comparisons
5+
# Porovnávání
66

7-
What will be the result for these expressions?
7+
Jaký bude výsledek těchto výrazů?
88

99
```js no-beautify
1010
5 > 4
11-
"apple" > "pineapple"
11+
"ananas" > "jablko"
1212
"2" > "12"
1313
undefined == null
1414
undefined === null
Lines changed: 92 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,103 @@
1-
# Comparisons
1+
# Porovnávání
22

3-
We know many comparison operators from maths.
3+
Z matematiky známe mnoho porovnávacích operátorů.
44

5-
In JavaScript they are written like this:
5+
V JavaScriptu se píší následovně:
66

7-
- Greater/less than: <code>a &gt; b</code>, <code>a &lt; b</code>.
8-
- Greater/less than or equals: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
9-
- Equals: `a == b`, please note the double equality sign `==` means the equality test, while a single one `a = b` means an assignment.
10-
- Not equals: In maths the notation is <code>&ne;</code>, but in JavaScript it's written as <code>a != b</code>.
7+
- Větší/menší než: <code>a &gt; b</code>, <code>a &lt; b</code>.
8+
- Větší/menší nebo rovno: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
9+
- Rovno: `a == b`. Prosíme všimněte si, že znak dvou rovnítek za sebou `==` znamená test rovnosti, zatímco jediné rovnítko `a = b` znamená přiřazení.
10+
- Nerovno: v matematice se používá znak <code>&ne;</code>, ale v JavaScriptu se píše <code>a != b</code>.
1111

12-
In this article we'll learn more about different types of comparisons, how JavaScript makes them, including important peculiarities.
12+
V tomto článku se dozvíme víc o různých druzích porovnání a o tom, jak s nimi JavaScript zachází, včetně důležitých zvláštností.
1313

14-
At the end you'll find a good recipe to avoid "JavaScript quirks"-related issues.
14+
Na konci najdete recept, jak se vyhnout různým problémům způsobeným JavaScriptovými „vtípky“.
1515

16-
## Boolean is the result
16+
## Výsledkem je typ boolean
1717

18-
All comparison operators return a boolean value:
18+
Všechny porovnávací operátory vracejí hodnotu typu boolean:
1919

20-
- `true` -- means "yes", "correct" or "the truth".
21-
- `false` -- means "no", "wrong" or "not the truth".
20+
- `true` -- znamená „ano“, „správně“ nebo „pravda“.
21+
- `false` -- znamená „ne“, „nesprávně“ nebo „nepravda“.
2222

23-
For example:
23+
Příklad:
2424

2525
```js run
26-
alert( 2 > 1 ); // true (correct)
27-
alert( 2 == 1 ); // false (wrong)
28-
alert( 2 != 1 ); // true (correct)
26+
alert( 2 > 1 ); // true (správně)
27+
alert( 2 == 1 ); // false (nesprávně)
28+
alert( 2 != 1 ); // true (správně)
2929
```
3030

31-
A comparison result can be assigned to a variable, just like any value:
31+
Výsledek porovnání můžeme přiřadit do proměnné, stejně jako každou jinou hodnotu:
3232

3333
```js run
34-
let result = 5 > 4; // assign the result of the comparison
35-
alert( result ); // true
34+
let výsledek = 5 > 4; // přiřadíme výsledek porovnání
35+
alert( výsledek ); // true
3636
```
3737

38-
## String comparison
38+
## Porovnávání řetězců
3939

40-
To see whether a string is greater than another, JavaScript uses the so-called "dictionary" or "lexicographical" order.
40+
Ke zjištění, zda je jeden řetězec větší než jiný, JavaScript používá tzv. „slovníkové“ neboli „lexikografické“ pořadí.
4141

42-
In other words, strings are compared letter-by-letter.
42+
Jinými slovy, řetězce se porovnávají znak po znaku.
4343

44-
For example:
44+
Příklad:
4545

4646
```js run
4747
alert( 'Z' > 'A' ); // true
4848
alert( 'Glow' > 'Glee' ); // true
4949
alert( 'Bee' > 'Be' ); // true
5050
```
5151

52-
The algorithm to compare two strings is simple:
52+
Algoritmus pro porovnání dvou řetězců je jednoduchý:
5353

54-
1. Compare the first character of both strings.
55-
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.
56-
3. Otherwise, if both strings' first characters are the same, compare the second characters the same way.
57-
4. Repeat until the end of either string.
58-
5. If both strings end at the same length, then they are equal. Otherwise, the longer string is greater.
54+
1. Porovnej první znak obou řetězců.
55+
2. Je-li první znak prvního řetězce větší (nebo menší) než první znak druhého řetězce, je první řetězec větší (nebo menší) než druhý. Tím jsme hotovi.
56+
3. V opačném případě, tedy jsou-li první znaky obou řetězců stejné, porovnej stejným způsobem druhé znaky.
57+
4. Tento proces opakuj, dokud nedojdeš na konec některého z řetězců.
58+
5. Mají-li oba řetězce stejnou délku, jsou si rovny. V opačném případě je delší řetězec větší.
5959

60-
In the first example above, the comparison `'Z' > 'A'` gets to a result at the first step.
60+
Ve výše uvedených příkladech porovnání `'Z' > 'A'` dojde k výsledku hned v prvním kroku.
6161

62-
The second comparison `'Glow'` and `'Glee'` needs more steps as strings are compared character-by-character:
62+
Porovnání řetězců `"Glow"` a `"Glee"` však vyžaduje více kroků, jelikož řetězce se porovnávají znak po znaku:
6363

64-
1. `G` is the same as `G`.
65-
2. `l` is the same as `l`.
66-
3. `o` is greater than `e`. Stop here. The first string is greater.
64+
1. `G` je stejné jako `G`.
65+
2. `l` je stejné jako `l`.
66+
3. `o` je větší než `e`. Tady se zastavíme. První řetězec je větší.
6767

68-
```smart header="Not a real dictionary, but Unicode order"
69-
The comparison algorithm given above is roughly equivalent to the one used in dictionaries or phone books, but it's not exactly the same.
68+
```smart header="Není to skutečný slovník, ale pořadí podle Unicode"
69+
Uvedený porovnávací algoritmus zhruba odpovídá tomu, jaký se používá k řazení ve slovnících nebo telefonních seznamech, ale není úplně stejný.
7070
71-
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>.
71+
Například záleží na velikosti písmen. Velké písmeno `"A"` není rovno malému `"a"`. Které je větší? Malé `"a"`. Proč? Protože malá písmena mají v interní kódovací tabulce, kterou JavaScript používá (Unicode), vyšší index. Ke specifickým podrobnostem a důsledkům se vrátíme v kapitole <info:string>.
7272
```
7373

74-
## Comparison of different types
74+
## Porovnávání rozdílných typů
7575

76-
When comparing values of different types, JavaScript converts the values to numbers.
76+
Když JavaScript porovnává hodnoty různých typů, převádí je na čísla.
7777

78-
For example:
78+
Příklad:
7979

8080
```js run
81-
alert( '2' > 1 ); // true, string '2' becomes a number 2
82-
alert( '01' == 1 ); // true, string '01' becomes a number 1
81+
alert( '2' > 1 ); // true, řetězec '2' se převede na číslo 2
82+
alert( '01' == 1 ); // true, řetězec '01' se převede na číslo 1
8383
```
8484

85-
For boolean values, `true` becomes `1` and `false` becomes `0`.
85+
U hodnot typu boolean se `true` převede na `1` a `false` na `0`.
8686

87-
For example:
87+
Příklad:
8888

8989
```js run
9090
alert( true == 1 ); // true
9191
alert( false == 0 ); // true
9292
```
9393

94-
````smart header="A funny consequence"
95-
It is possible that at the same time:
94+
````smart header="Legrační důsledek"
95+
Je možné, že současně:
9696
97-
- Two values are equal.
98-
- One of them is `true` as a boolean and the other one is `false` as a boolean.
97+
- Dvě hodnoty se budou rovnat.
98+
- Jedna z nich bude jako boolean `true` a druhá `false`.
9999
100-
For example:
100+
Příklad:
101101
102102
```js run
103103
let a = 0;
@@ -109,108 +109,108 @@ alert( Boolean(b) ); // true
109109
alert(a == b); // true!
110110
```
111111
112-
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.
112+
Z pohledu JavaScriptu je tento výsledek zcela normální. Test rovnosti převádí hodnoty pomocí konverze na čísla (proto se `"0"` převede na `0`), zatímco explicitní konverze `Boolean` funguje podle jiných pravidel.
113113
````
114114

115-
## Strict equality
115+
## Striktní rovnost
116116

117-
A regular equality check `==` has a problem. It cannot differentiate `0` from `false`:
117+
Běžné ověření rovnosti `==` má problém. Nedokáže rozlišit `0` od `false`:
118118

119119
```js run
120120
alert( 0 == false ); // true
121121
```
122122

123-
The same thing happens with an empty string:
123+
Totéž platí pro prázdný řetězec:
124124

125125
```js run
126126
alert( '' == false ); // true
127127
```
128128

129-
This happens because operands of different types are converted to numbers by the equality operator `==`. An empty string, just like `false`, becomes a zero.
129+
To se děje proto, že operátor rovnosti `==` převádí operandy různých typů na čísla. Prázdný řetězec, stejně jako `false`, se převede na nulu.
130130

131-
What to do if we'd like to differentiate `0` from `false`?
131+
Co máme dělat, jestliže chceme rozlišit `0` od `false`?
132132

133-
**A strict equality operator `===` checks the equality without type conversion.**
133+
**Operátor striktní rovnosti `===` zkontroluje rovnost bez typové konverze.**
134134

135-
In other words, if `a` and `b` are of different types, then `a === b` immediately returns `false` without an attempt to convert them.
135+
Jinými slovy, jsou-li `a` a `b` různých typů, pak `a === b` okamžitě vrátí `false`, aniž by se je pokusil konvertovat.
136136

137-
Let's try it:
137+
Zkusme to:
138138

139139
```js run
140-
alert( 0 === false ); // false, because the types are different
140+
alert( 0 === false ); // false, protože typy jsou různé
141141
```
142142

143-
There is also a "strict non-equality" operator `!==` analogous to `!=`.
143+
Existuje i operátor „striktní nerovnosti“ `!==`, který je analogický s `!=`.
144144

145-
The strict equality operator is a bit longer to write, but makes it obvious what's going on and leaves less room for errors.
145+
Operátor striktní rovnosti se píše trošičku déle, ale díky němu je hned zřejmé, o co tady jde, a ponechává méně prostoru k chybám.
146146

147-
## Comparison with null and undefined
147+
## Porovnávání s null a undefined
148148

149-
There's a non-intuitive behavior when `null` or `undefined` are compared to other values.
149+
Chování při porovnávání `null` nebo `undefined` s jinými hodnotami není zcela intuitivní.
150150

151-
For a strict equality check `===`
152-
: These values are different, because each of them is a different type.
151+
U operátoru striktní rovnosti `===`
152+
: Tyto hodnoty jsou různé, protože každá z nich je jiného typu.
153153

154154
```js run
155155
alert( null === undefined ); // false
156156
```
157157

158-
For a non-strict check `==`
159-
: There's a special rule. These two are a "sweet couple": they equal each other (in the sense of `==`), but not any other value.
158+
U operátoru nestriktní rovnosti `==`
159+
: Platí zvláštní pravidlo. Tyto dvě hodnoty tvoří „zamilovanou dvojici“: jsou si navzájem rovny (ve smyslu `==`), ale nejsou rovny žádné jiné hodnotě.
160160

161161
```js run
162162
alert( null == undefined ); // true
163163
```
164164

165-
For maths and other comparisons `< > <= >=`
166-
: `null/undefined` are converted to numbers: `null` becomes `0`, while `undefined` becomes `NaN`.
165+
U matematických a jiných porovnání `< > <= >=`
166+
: `null/undefined` se převádějí na čísla: `null` se převede na `0`, zatímco `undefined` se převede na `NaN`.
167167

168-
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.
168+
Nyní se podívejme na některé legrační jevy, k nimž dochází při použití těchto pravidel. A, což je důležitější, jak se s nimi nechytit do pasti.
169169

170-
### Strange result: null vs 0
170+
### Podivný výsledek: null vs 0
171171

172-
Let's compare `null` with a zero:
172+
Porovnejme `null` s nulou:
173173

174174
```js run
175175
alert( null > 0 ); // (1) false
176176
alert( null == 0 ); // (2) false
177177
alert( null >= 0 ); // (3) *!*true*/!*
178178
```
179179

180-
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.
180+
Matematicky je to zvláštní. Poslední uvedený výsledek tvrdí, že „`null` je větší nebo rovno nule“, takže jedno z výše uvedených porovnání musí být `true`, ale obě jsou `false`.
181181

182-
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.
182+
Důvodem je, že test rovnosti `==` a porovnání `> < >= <=` fungují odlišně. Porovnání převedou `null` na číslo a zacházejí s ním jako s `0`. Proto (3) `null >= 0` platí a (1) `null > 0` neplatí.
183183

184-
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.
184+
Naproti tomu rovnost `==` pro `undefined` a `null` je definována tak, že se bez jakýchkoli konverzí rovnají navzájem a nerovnají se ničemu jinému. Proto (2) `null == 0` neplatí.
185185

186-
### An incomparable undefined
186+
### Neporovnatelné undefined
187187

188-
The value `undefined` shouldn't be compared to other values:
188+
Hodnota `undefined` by neměla být porovnávána s jinými hodnotami:
189189

190190
```js run
191191
alert( undefined > 0 ); // false (1)
192192
alert( undefined < 0 ); // false (2)
193193
alert( undefined == 0 ); // false (3)
194194
```
195195

196-
Why does it dislike zero so much? Always false!
196+
Proč ji porovnávání nemá tak rádo? Vždycky vyjde false!
197197

198-
We get these results because:
198+
Tyto výsledky jsme získali, protože:
199199

200-
- 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.
201-
- The equality check `(3)` returns `false` because `undefined` only equals `null`, `undefined`, and no other value.
200+
- Porovnání `(1)` a `(2)` vracejí `false`, protože `undefined` se převede na `NaN` a `NaN` je speciální číselná hodnota, která při všech porovnáních vrátí `false`.
201+
- Test rovnosti `(3)` vrací `false`, protože `undefined` se rovná jedině `null` a `undefined`, žádné jiné hodnotě.
202202

203-
### Avoid problems
203+
### Jak se vyhnout problémům
204204

205-
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 avoid problems with them:
205+
Jak se přes tyto příklady přenést? Měli bychom si tyto zvláštnosti neustále pamatovat? Vlastně ani ne. Ve skutečnosti se s těmito triky postupem času sžijete, ale existuje solidní způsob, jak se vyhnout problémům, které způsobují:
206206

207-
- Treat any comparison with `undefined/null` except the strict equality `===` with exceptional care.
208-
- 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.
207+
- Zacházejte s každým porovnáním s `undefined/null` kromě striktní rovnosti `===` výjimečně opatrně.
208+
- Nepoužívejte porovnání `>= > < <=` na proměnnou, která by mohla být `null/undefined`, pokud si opravdu nejste jisti tím, co děláte. Může-li proměnná obsahovat tyto hodnoty, ověřte je zvlášť.
209209

210-
## Summary
210+
## Shrnutí
211211

212-
- Comparison operators return a boolean value.
213-
- Strings are compared letter-by-letter in the "dictionary" order.
214-
- When values of different types are compared, they get converted to numbers (with the exclusion of a strict equality check).
215-
- The values `null` and `undefined` equal `==` each other and do not equal any other value.
216-
- Be careful when using comparisons like `>` or `<` with variables that can occasionally be `null/undefined`. Checking for `null/undefined` separately is a good idea.
212+
- Porovnávací operátory vracejí hodnotu typu boolean.
213+
- Řetězce se porovnávají znak po znaku podle „slovníkového“ pořadí.
214+
- Když se porovnávají hodnoty různých typů, převedou se na čísla (s výjimkou operátoru striktní rovnosti).
215+
- Hodnoty `null` a `undefined` se rovnají `==` sobě navzájem, ale nerovnají se žádné jiné hodnotě.
216+
- Buďte opatrní při používání porovnávání jako `<` nebo `>` na proměnné, které mohou být `null/undefined`. Dobrý nápad je odděleně ověřit, zda opravdu jsou `null/undefined`.

0 commit comments

Comments
 (0)
Please sign in to comment.