Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork3
Methods of primitives#151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
2 commits Select commitHold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
26 changes: 13 additions & 13 deletions1-js/05-data-types/01-primitives-methods/1-string-new-property/solution.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,24 @@ | ||
Zkuste si to spustit: | ||
```js run | ||
letřetězec = "Ahoj"; | ||
řetězec.test = 5; // (*) | ||
alert(řetězec.test); | ||
``` | ||
Podle toho, zda máte`use strict`nebo ne, výsledek může být: | ||
1. `undefined` (nestriktní režim). | ||
2.Chyba (striktní režim). | ||
Proč? Přehrajme si, co se děje na řádku `(*)`: | ||
1.Když přistoupíme k vlastnosti proměnné `řetězec`, vytvoří se „obal“. | ||
2.Ve striktním režimu zápis do něj znamená chybu. | ||
3.V nestriktním režimu bude operace s touto vlastností provedena, objekt získá vlastnost`test`, ale poté „obal“ zmizí, takže na posledním řádku nemá `řetězec` po této vlastnosti ani stopu. | ||
**Tento příklad jednoznačně dokazuje, že primitivy nejsou objekty.** | ||
Nelze do nich ukládat další data. |
12 changes: 6 additions & 6 deletions1-js/05-data-types/01-primitives-methods/1-string-new-property/task.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
116 changes: 58 additions & 58 deletions1-js/05-data-types/01-primitives-methods/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | |||
---|---|---|---|---|---|
@@ -1,129 +1,129 @@ | |||||
#Metody primitivů | |||||
JavaScriptnám umožňuje pracovat s primitivy (řetězci, čísly atd.), jako by to byly objekty. Poskytuje i metody, které na nich můžeme volat jako na objektech. V dalších kapitolách je prostudujeme, ale nejprve se podíváme, jak to funguje, protože primitivy samozřejmě nejsou objekty (a zde to ještě více ozřejmíme). | |||||
Podíváme se na klíčové rozdíly mezi primitivy a objekty. | |||||
Primitiv: | |||||
-Představuje hodnotu primitivního typu. | |||||
-Existuje 7 primitivních typů: `string`, `number`, `bigint`, `boolean`, `symbol`, `null`a `undefined`. | |||||
Objekt: | |||||
-Dokáže obsahovat více hodnot uložených ve svých vlastnostech. | |||||
-Může být vytvořen pomocí `{}`,např. `{jméno: "Jan",věk: 30}`.V JavaScriptu jsou i jiné druhy objektů, například funkce jsou objekty. | |||||
Jedna z nejlepších věcí na objektech je, že jako jejich vlastnost můžeme uložit funkci. | |||||
```js run | |||||
letjan = { | |||||
jméno: "Jan", | |||||
řekniAhoj: function() { | |||||
alert("Ahoj kámo!"); | |||||
} | |||||
}; | |||||
jan.řekniAhoj(); //Ahoj kámo! | |||||
``` | |||||
Zde jsme tedy vytvořili objekt `jan` s metodou `řekniAhoj`. | |||||
JavaScript obsahuje mnoho vestavěných objektů, například ty, které pracují s daty, chybami, HTMLprvky a podobně. Mají různé vlastnosti a metody. | |||||
Tyto vlastnosti však mají svou cenu! | |||||
Objekty jsou „těžší“ než primitivy. Vyžadují více zdrojů, které zatěžují vnitřní stroj. | |||||
##Primitiv jako objekt | |||||
Tvůrci JavaScriptu čelili následujícímu paradoxu: | |||||
-Existuje mnoho věcí, které člověk chce dělat s primitivy, jakými jsou řetězec nebo číslo. Bylo by skvělé přistupovat k nim pomocí metod. | |||||
-Primitivy musejí být co nejrychlejší a co nejmenší. | |||||
Řešení vypadá trochu těžkopádně, ale je zde: | |||||
1.Primitiv je pořád primitiv. Jednoduchá hodnota, po jaké toužíme. | |||||
2.Jazyk umožňuje přístup k metodám a vlastnostem řetězců, čísel, booleanů a symbolů. | |||||
3.Abytofungovalo, vytvoří se speciální objekt zvaný „obal“ neboli „wrapper“, který tuto přídavnou funkcionalitu poskytne a pak bude zničen. | |||||
Tyto „objektové obaly“ jsou pro každý primitivní typ jiné a nazývají se: `String`, `Number`, `Boolean`, `Symbol`a `BigInt`.Poskytují tedy různé sady metod. | |||||
Například existuje řetězcová metoda [řetězec.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase), která vrací `řetězec` zapsaný velkými písmeny. | |||||
Funguje následovně: | |||||
```js run | |||||
letřetězec = "Ahoj"; | |||||
alert(řetězec.toUpperCase() ); //AHOJ | |||||
``` | |||||
Jednoduché, že? Ve skutečnosti se v `řetězec.toUpperCase()` děje následující: | |||||
1.Řetězec `řetězec` je primitiv. V okamžiku přístupu k jeho vlastnosti se tedy vytvoří speciální objekt, který zná hodnotu tohoto řetězce a obsahuje užitečné metody, např. `toUpperCase()`. | |||||
2.Tato metoda se spustí a vrátí nový řetězec (který je zobrazen funkcí `alert`). | |||||
3.Speciální objekt se zničí a zůstane samotný primitiv `řetězec`. | |||||
Primitivy tedy mohou poskytovat metody, ale samy zůstávají malé. | |||||
JavaScriptový motor tento proces značně optimalizuje. Může dokonce úplně vynechat vytvoření nového objektu. Stále však musí dodržovat specifikaci a chovat se tak, jako by jej vytvořil. | |||||
I čísla mají své vlastní metody, například[toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed)zaokrouhluje číslo se zadanou přesností: | |||||
```js run | |||||
let n = 1.23456; | |||||
alert( n.toFixed(2) ); // 1.23 | |||||
``` | |||||
Další specifické metody uvidíme v kapitolách<info:number>a <info:string>. | |||||
````warn header="Konstruktory `String/Number/Boolean`jsou jen pro interní použití" | |||||
Některé jazyky, např. Java, nám umožňují explicitně vytvářet „obaly“ pro primitivy pomocí syntaxe typu`new Number(1)`nebo `new Boolean(false)`. | |||||
V JavaScriptu je to z historických důvodů také možné, ale důrazně **nedoporučované**.Skript se začne chovat bláznivě hned na několika místech. | |||||
Například: | |||||
```js run | |||||
alert( typeof 0 ); // "number" | |||||
alert( typeof new Number(0) ); // "object"! | |||||
``` | |||||
Objekty jsou v`if` vždy pravdivé, takže zde se zobrazí hlášení: | |||||
```js run | |||||
letnula = new Number(0); | |||||
if (nula) { //nula je pravdivá, protože je to objekt | |||||
alert( "nula je pravdivá!?!" ); | |||||
} | |||||
``` | |||||
Naproti tomu použití stejné funkce`String/Number/Boolean`bez `new`je zcela správná a užitečná věc. Funkce převede hodnotu na odpovídající typ: na řetězec, na číslo nebo na boolean (na primitiv). | |||||
Například tohle je zcela v pořádku: | |||||
```js | |||||
letčíslo = Number("123"); //převede řetězec na číslo | |||||
``` | |||||
```` | |||||
````warn header="null/undefinednemají žádné metody" | |||||
Speciální primitivy`null`a `undefined`představují výjimky. Nemají odpovídající „obaly“ a neposkytují žádné metody. V určitém smyslu slova jsou vlastně „ty nejprimitivnější“. | |||||
Pokus o přístup k vlastnosti takové hodnoty ohlásí chybu: | |||||
```js run | |||||
alert(null.test); //chyba | |||||
```` | |||||
##Shrnutí | |||||
-Primitivy s výjimkou`null`a `undefined`poskytují mnoho užitečných metod. Prostudujeme je v následujících kapitolách. | |||||
-Formálně tyto metody pracují na dočasných objektech, ale JavaScriptové motory jsou dobře vyladěny, aby je vnitřně optimalizovaly, takže jejich volání není nákladné. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.