From 250c5d9ce6b878a662294b8632e50965dff5c4a9 Mon Sep 17 00:00:00 2001 From: Xapuu Date: Tue, 29 Oct 2019 00:19:09 +0200 Subject: [PATCH] Data types --- .../05-types/1-string-quotes/solution.md | 8 +- .../05-types/1-string-quotes/task.md | 6 +- 1-js/02-first-steps/05-types/article.md | 178 +++++++++--------- 3 files changed, 97 insertions(+), 95 deletions(-) diff --git a/1-js/02-first-steps/05-types/1-string-quotes/solution.md b/1-js/02-first-steps/05-types/1-string-quotes/solution.md index 68a13c15b..e714bd795 100644 --- a/1-js/02-first-steps/05-types/1-string-quotes/solution.md +++ b/1-js/02-first-steps/05-types/1-string-quotes/solution.md @@ -1,15 +1,15 @@ -Backticks embed the expression inside `${...}` into the string. +Вгради израза посредством примове и `${...}` в стринга. ```js run let name = "Ilya"; -// the expression is a number 1 +// изразът е числото 1 alert( `hello ${1}` ); // hello 1 -// the expression is a string "name" +// изразът е стринг "name" alert( `hello ${"name"}` ); // hello name -// the expression is a variable, embed it +// изразът е променлива, вгради я alert( `hello ${name}` ); // hello Ilya ``` diff --git a/1-js/02-first-steps/05-types/1-string-quotes/task.md b/1-js/02-first-steps/05-types/1-string-quotes/task.md index 14ea6b4d6..e457efdb8 100644 --- a/1-js/02-first-steps/05-types/1-string-quotes/task.md +++ b/1-js/02-first-steps/05-types/1-string-quotes/task.md @@ -1,10 +1,10 @@ -importance: 5 +важност: 5 --- -# String quotes +# Стрингови цитати -What is the output of the script? +Какъв е резултата от скрипта? ```js let name = "Ilya"; diff --git a/1-js/02-first-steps/05-types/article.md b/1-js/02-first-steps/05-types/article.md index 0da617373..02ac67a50 100644 --- a/1-js/02-first-steps/05-types/article.md +++ b/1-js/02-first-steps/05-types/article.md @@ -1,6 +1,6 @@ -# Data types +# Типове данни -A variable in JavaScript can contain any data. A variable can at one moment be a string and at another be a number: +В JavaScript, една променлива може да съдържа всякакъв вид данни, в един момент може да съхранява стрингов тип, а в следващ числен. ```js // no error @@ -8,63 +8,63 @@ let message = "hello"; message = 123456; ``` -Programming languages that allow such things are called "dynamically typed", meaning that there are data types, but variables are not bound to any of them. +Програмните езици, които позволяват такова поведение се наричат "динамично типизирани", което означава, че има типове данни, но самите променливите не биват обвързвани с тях. -There are seven basic data types in JavaScript. Here, we'll cover them in general and in the next chapters we'll talk about each of them in detail. +В JavaScript има седем основни типове данни, като в тази глава ще се запознаем по-общо с тях, а в следващите глави, ще разгледаме всеки тип по отделно и в детайл. -## A number +## Числен ```js let n = 123; n = 12.345; ``` -The *number* type represents both integer and floating point numbers. +*Численият* тип обхваща целите числа, както и тези с "плаваща запетая". -There are many operations for numbers, e.g. multiplication `*`, division `/`, addition `+`, subtraction `-`, and so on. +Има много видове операции с числа като: умножение `*`, деление `/`, събиране `+`, изваждане `-` и така нататък. -Besides regular numbers, there are so-called "special numeric values" which also belong to this data type: `Infinity`, `-Infinity` and `NaN`. +Освен обикновените числа, съществуват и така наречените "специални числени стойности", които принадлежат към числовият тип данни, това са: `Infinity`, `-Infinity` и `NaN`. -- `Infinity` represents the mathematical [Infinity](https://en.wikipedia.org/wiki/Infinity) ∞. It is a special value that's greater than any number. +- `Infinity` е еквивалент на математическият термин [Безкрайност](https://bg.wikipedia.org/wiki/%D0%91%D0%B5%D0%B7%D0%BA%D1%80%D0%B0%D0%B9%D0%BD%D0%BE%D1%81%D1%82) ∞. Това е специална стойност, по-голяма от всяко число. - We can get it as a result of division by zero: + Може да получим тази стойност, като резултат от операция с делене на нула: ```js run alert( 1 / 0 ); // Infinity ``` - Or just reference it directly: + Или ако директно реферираме стойността: ```js run alert( Infinity ); // Infinity ``` -- `NaN` represents a computational error. It is a result of an incorrect or an undefined mathematical operation, for instance: +- `NaN` представлява изчислителна грешка. Тя е резултат от грешна или неидентифицирана математическа операция, като: ```js run - alert( "not a number" / 2 ); // NaN, such division is erroneous + alert( "not a number" / 2 ); // NaN, такова деление е грешно ``` - `NaN` is sticky. Any further operation on `NaN` returns `NaN`: + `NaN` е с "лепкав" характер, което означава че всяка следваща операция, след като веднъж сме получили `NaN` в уравнение, ще ни върне стойност `NaN`: ```js run alert( "not a number" / 2 + 5 ); // NaN ``` - So, if there's a `NaN` somewhere in a mathematical expression, it propagates to the whole result. + Така че ако получим стойност `NaN`, където и да е в математическо уравнение, тази стойност ще бъде и резултатът от уравнението. -```smart header="Mathematical operations are safe" -Doing maths is "safe" in JavaScript. We can do anything: divide by zero, treat non-numeric strings as numbers, etc. +```smart header="Математическите операции са безопасни" +Калкулирането в JavaScript е "безопасно". Ние можем да правим всичко: да делим с нула, да третираме не числови стрингове (текст) като числа и т.н.. -The script will never stop with a fatal error ("die"). At worst, we'll get `NaN` as the result. +Скрипта никога няма да спре да се изпълнява, с фатална грешка ("никога няма да умре"). В най-лошият случай може да получим `NaN` като резултат. ``` -Special numeric values formally belong to the "number" type. Of course they are not numbers in the common sense of this word. +Специалните числови стойности, принадлежат към типа "number", като разбира се те не са числа, в нормалния смисъл на думата. -We'll see more about working with numbers in the chapter . +Ще разгледаме в по-подробно работа с числа в главата . -## A string +## Стринг -A string in JavaScript must be surrounded by quotes. +Стрингът в JavaScript трябва да бъде в кавички. ```js let str = "Hello"; @@ -72,95 +72,96 @@ let str2 = 'Single quotes are ok too'; let phrase = `can embed ${str}`; ``` -In JavaScript, there are 3 types of quotes. +В JavaScript има три вида кавички. -1. Double quotes: `"Hello"`. -2. Single quotes: `'Hello'`. -3. Backticks: `Hello`. +1. Двойни кавички: `"Hello"`. +2. Единични кавички: `'Hello'`. +3. Прим-ове (Backticks): `Hello`. -Double and single quotes are "simple" quotes. There's no difference between them in JavaScript. +Двойните и единичните кавички са "прости" кавички, в JavaScript не се прави разлика между тях. -Backticks are "extended functionality" quotes. They allow us to embed variables and expressions into a string by wrapping them in `${…}`, for example: +Прим-овете са кавички с допълнителна функционалност. Те позволяват вграждане на променливи и изрази в стрингове, чрез обграждане в `${…}`, пример за това е: ```js run let name = "John"; -// embed a variable +// вграждане на променлива alert( `Hello, *!*${name}*/!*!` ); // Hello, John! -// embed an expression +// вграждане на израз alert( `the result is *!*${1 + 2}*/!*` ); // the result is 3 ``` -The expression inside `${…}` is evaluated and the result becomes a part of the string. We can put anything in there: a variable like `name` or an arithmetical expression like `1 + 2` or something more complex. +Изразът в `${…}` бива изчислен и се превръща в част от стрингът. Ние може да поставим всичко вътре, променливи като `name` или математическа операция като `1 + 2`, или дори по-сложни операции. + +Моля запомнете, че това може да стане единствено в примове, останалите видове кавички не поддържат "вграждащата" функционалност на стринга! -Please note that this can only be done in backticks. Other quotes don't have this embedding functionality! ```js run -alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (double quotes do nothing) +alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (двойните кавички не правят нищо) ``` -We'll cover strings more thoroughly in the chapter . +Ще разгледаме по-подробно стринговете в главата . -```smart header="There is no *character* type." -In some languages, there is a special "character" type for a single character. For example, in the C language and in Java it is `char`. +```smart header="Типът *буква* (character) не съществува" +В някои езици има специален тип "character", който може да съхранява един символ. Пример за това е типа `char` използван в езиците C и Java. -In JavaScript, there is no such type. There's only one type: `string`. A string may consist of only one character or many of them. +В JavaScript, този тип не съществува, а има само тип стринг, като един стринг може да е изграден от един или много символи. ``` -## A boolean (logical type) +## Булева (логически тип) -The boolean type has only two values: `true` and `false`. +Логическия тип има само две стойности:`true` и `false`. -This type is commonly used to store yes/no values: `true` means "yes, correct", and `false` means "no, incorrect". +Този тип е често използван за съхраняването на да/не стойности: `true` означава "да, вярно" a `false` означава "не, грешно". -For instance: +Пример: ```js -let nameFieldChecked = true; // yes, name field is checked -let ageFieldChecked = false; // no, age field is not checked +let nameFieldChecked = true; // да, полето съхраняващо име е маркирано +let ageFieldChecked = false; // не, полето съхраняващо възраст не е маркирано ``` -Boolean values also come as a result of comparisons: +Булевите стойности, могат да бъдат получени и като резултат от сравнение: ```js run let isGreater = 4 > 1; -alert( isGreater ); // true (the comparison result is "yes") +alert( isGreater ); // true (резултатът от сравнението е "да") ``` -We'll cover booleans more deeply in the chapter . +Ще разгледаме в по-голяма дълбочина булевите в главата . -## The "null" value +## Стойността "null" -The special `null` value does not belong to any of the types described above. +Специалната стойност `null` не принадлежи към до тук описаните типове. -It forms a separate type of its own which contains only the `null` value: +Тази стойност сама обособява отделен тип, който може да съдържа само стойността `null`: ```js let age = null; ``` -In JavaScript, `null` is not a "reference to a non-existing object" or a "null pointer" like in some other languages. +В JavaScript, `null` не е "reference to a non-existing object" или "null pointer", както в някои други езици. -It's just a special value which represents "nothing", "empty" or "value unknown". +`null` е просто специална стойност, означаваща "нищо", "празно" или "неизвестна стойност". -The code above states that `age` is unknown or empty for some reason. +Горният пример декларира че `age` е неизвестна или празна променлива, поради някаква причина. -## The "undefined" value +## Стойността "undefined" -The special value `undefined` also stands apart. It makes a type of its own, just like `null`. +Специалната стойност `undefined` също се отличава, тя също сама обособява тип, точно както и `null`. -The meaning of `undefined` is "value is not assigned". +Значението на `undefined` е "не е зададена стойност". -If a variable is declared, but not assigned, then its value is `undefined`: +Ако променлива бъде декларирана, но на нея не е присвоена стойност, то стойността й ще бъде `undefined`: ```js run let x; -alert(x); // shows "undefined" +alert(x); // показва "undefined" ``` -Technically, it is possible to assign `undefined` to any variable: +Технически е възможно да се присвои стойност `undefined` на която и да е променлива: ```js run let x = 123; @@ -170,28 +171,28 @@ x = undefined; alert(x); // "undefined" ``` -...But we don't recommend doing that. Normally, we use `null` to assign an "empty" or "unknown" value to a variable, and we use `undefined` for checks like seeing if a variable has been assigned. +... Но това не е препоръчителна практика. Обикновено използваме `null`, когато искаме да зададем "празна" или "неизвестна" стойност на променлива, а използваме `undefined` за да проверим дали стойност е била присвоена на дадена променлива. -## Objects and Symbols +## Обекти и символи -The `object` type is special. +Типът `object` е специален. -All other types are called "primitive" because their values can contain only a single thing (be it a string or a number or whatever). In contrast, objects are used to store collections of data and more complex entities. We'll deal with them later in the chapter after we learn more about primitives. +Всички типове освен `object` са наричани "примитивни", защото могат да съдържат само една стойност (било то стринг, число или друго). За разлика от останалите типове обектите (елементите от тип `object`), биват използвани да съхраняват колекции от данни и сложни структури. Тях ще разгледаме подробно в главата , след като научим повече за примитивните типове. -The `symbol` type is used to create unique identifiers for objects. We mention it here for completeness, but we'll study it after objects. +`symbol` (Символ) типът се използва за създаването на уникални идентификатори за обекти. Този тип бива споменат тук чисто информативно, като част от всички типовете данни в JavaScript, но ще бъде разгледан след темата за обекти. -## The typeof operator [#type-typeof] +## Оператора typeof [#type-typeof] -The `typeof` operator returns the type of the argument. It's useful when we want to process values of different types differently or just want to do a quick check. +`typeof` оператора връща типът, на даден аргумент. Той е полезен, когато искаме да обработим данни от различен тип, по различен начин или просто искаме да проверим типът на дадени данни. -It supports two forms of syntax: +Оператора може да бъде използван по два начина: -1. As an operator: `typeof x`. -2. As a function: `typeof(x)`. +1. Като оператор: `typeof x`. +2. Като функция: `typeof(x)`. -In other words, it works with parentheses or without them. The result is the same. +Казано по друг начин, той може да работи без или със скоби, като резултатът остава един и същ. -The call to `typeof x` returns a string with the type name: +Изпълнението на `typeof x`, ни дава резултат от тип стринг, съдържащ името на типа. ```js typeof undefined // "undefined" @@ -217,29 +218,30 @@ typeof alert // "function" (3) */!* ``` -The last three lines may need additional explanation: +Последните три реда, от примера, най-вероятно имат нужда от допълнителни пояснения: + +1. `Math` е вграден обект в JavaScript, който ни предоставя набор от математически операции. Ще научим за него в главата . Тук, той ни служи просто като пример за обект. +2. Резултатът от `typeof null` е `"object"`. Това е грешно и е официално признат бъг в оператора `typeof`, оставен с цел съвместимост, на вече съществуващ код. Разбира се `null` не е обект, а специална стойност, със свой собствен тип, затова ще повторим "това е грешка в езика". +3. Резултатът от `typeof alert` е `"function"`, защото `alert` е функция. Ще изучаваме по-подробно функциите в следващите глави, където ще видим, че в езика JavaScript не съществува специален тип "function". Функциите спадат към типа `object`, но оператора `typeof` ги третира различно и ни връща `"function"`, което само по себе си не е абсолютно правилно, но е доста удобно. -1. `Math` is a built-in object that provides mathematical operations. We will learn it in the chapter . Here, it serves just as an example of an object. -2. The result of `typeof null` is `"object"`. That's wrong. It is an officially recognized error in `typeof`, kept for compatibility. Of course, `null` is not an object. It is a special value with a separate type of its own. So, again, this is an error in the language. -3. The result of `typeof alert` is `"function"`, because `alert` is a function. We'll study functions in the next chapters where we'll also see that there's no special "function" type in JavaScript. Functions belong to the object type. But `typeof` treats them differently, returning `"function"`. That's not quite correct, but very convenient in practice. +## Заключение -## Summary +В езика JavaScript има седем основни типа данни. -There are 7 basic data types in JavaScript. +- `number` използван за всякакъв вид числа: цели или такива с "плаваща запетая". +- `string` за стрингове. Като стринга е структура изградена от една или много букви (в JavaScript няма отделено обособен тип за съхранение на единична буква (символ)). +- `boolean` за вярно и грешно : `true`/`false` . +- `null` за неизвестни стойности -- самостоятелен тип, който има една единствена стойност: `null`. +- `undefined` за незададени стойности -- самостоятелен тип, който има една единствена стойност: `undefined`. +- `object` за по-сложни структури. +- `symbol` за уникални идентификатори. -- `number` for numbers of any kind: integer or floating-point. -- `string` for strings. A string may have one or more characters, there's no separate single-character type. -- `boolean` for `true`/`false`. -- `null` for unknown values -- a standalone type that has a single value `null`. -- `undefined` for unassigned values -- a standalone type that has a single value `undefined`. -- `object` for more complex data structures. -- `symbol` for unique identifiers. -The `typeof` operator allows us to see which type is stored in a variable. +Оператора `typeof` ни позволява да разберем какъв тип се съхранява в дадена променлива. -- Two forms: `typeof x` or `typeof(x)`. -- Returns a string with the name of the type, like `"string"`. -- For `null` returns `"object"` -- this is an error in the language, it's not actually an object. +- Има две форми: `typeof x` или `typeof(x)`. +- Връща стойност от тип стринг, който съдържа типа на проверяваната стойност, такъв пример е : `"string"`. +- За `null` връща `"object"` -- това е грешка в езика, null в действителност не е обект. -In the next chapters, we'll concentrate on primitive values and once we're familiar with them, we'll move on to objects. +В следващите глави ще се концентрираме върху примитивните типове данни и щом започнем да се чувстваме комфортно с тях ще преминем към обектите.