[ico20]: https://github.com/garevna/js-course/blob/master/ico/a-level-20.png
[ico25]: https://github.com/garevna/js-course/blob/master/ico/a-level-25.png
[ico50]: https://github.com/garevna/js-course/blob/master/ico/a-level-30.png
[hw-20]: https://github.com/garevna/js-course/blob/master/ico/briefcase-20.png
[hw-30]: https://github.com/garevna/js-course/blob/master/ico/briefcase-30.png
[hw-40]: https://github.com/garevna/js-course/blob/master/ico/briefcase-40.png
[cap-20]: https://github.com/garevna/js-course/blob/master/ico/coffee-20.png
[cap-25]: https://github.com/garevna/js-course/blob/master/ico/coffee-20.png
[cap-30]: https://github.com/garevna/js-course/blob/master/ico/coffee-20.png
[cap-40]: https://github.com/garevna/js-course/blob/master/ico/coffee-20.png
[warn-25]: https://github.com/garevna/js-course/blob/master/ico/warning.png
[warn-30]: https://github.com/garevna/js-course/blob/master/ico/warning.png
[warn-40]: https://github.com/garevna/js-course/blob/master/ico/warning.png
[link-20]: https://github.com/garevna/js-course/blob/master/ico/link-20.png
[link-25]: https://github.com/garevna/js-course/blob/master/ico/link-25.png
[err-20]: https://github.com/garevna/js-course/blob/master/ico/no_entry-20.png
[err-25]: https://github.com/garevna/js-course/blob/master/ico/no_entry-25.png
[err-30]: https://github.com/garevna/js-course/blob/master/ico/no_entry-30.png
[file-20]: https://github.com/garevna/js-course/blob/master/ico/pencil-20.png
[file-25]: https://github.com/garevna/js-course/blob/master/ico/pencil-25.png
[file-30]: https://github.com/garevna/js-course/blob/master/ico/pencil-30.png
[dir-20]: https://github.com/garevna/js-course/blob/master/ico/folder-20.png
[dir-25]: https://github.com/garevna/js-course/blob/master/ico/folder-25.png
[dir-30]: https://github.com/garevna/js-course/blob/master/ico/folder-30.png
[dir-40]: https://github.com/garevna/js-course/blob/master/ico/folder-40.png
[bash-20]: https://github.com/garevna/js-course/blob/master/ico/bash-20.png
[bash-25]: https://github.com/garevna/js-course/blob/master/ico/bash-25.png
[bash-30]: https://github.com/garevna/js-course/blob/master/ico/bash-30.png
[bash-40]: https://github.com/garevna/js-course/blob/master/ico/bash-40.png
[git-20]: https://github.com/garevna/js-course/blob/master/ico/github-20.png
[git-25]: https://github.com/garevna/js-course/blob/master/ico/github-25.png
[git-30]: https://github.com/garevna/js-course/blob/master/ico/github-30.png
[wink-20]: https://github.com/garevna/js-course/blob/master/ico/wink-20.png
[wink-25]: https://github.com/garevna/js-course/blob/master/ico/wink-25.png
[wink-30]: https://github.com/garevna/js-course/blob/master/ico/wink-30.png
[point-20]: https://github.com/garevna/js-course/blob/master/ico//point_up-20.png
[point-25]: https://github.com/garevna/js-course/blob/master/ico/point_up-25.png
[point-30]: https://github.com/garevna/js-course/blob/master/ico/point_up-30.png
[ok-20]: https://github.com/garevna/js-course/blob/master/ico/ok-20.png
[ok-25]: https://github.com/garevna/js-course/blob/master/ico/ok-25.png
[ok-30]: https://github.com/garevna/js-course/blob/master/ico/ok-30.png
[super-20]: https://github.com/garevna/js-course/blob/master/ico/super-20.png
[super-25]: https://github.com/garevna/js-course/blob/master/ico/super-25.png
[super-30]: https://github.com/garevna/js-course/blob/master/ico/super-30.png
[debagger]: https://github.com/garevna/js-course/blob/master/ico/debag-paused.png "Resume script execution F8 Ctrl+\"
[reload]: https://github.com/garevna/js-course/blob/master/ico/reload.png
[file-20]: https://github.com/garevna/js-course/blob/master/ico/pencil-20.png
[yt-20]: https://github.com/garevna/js-course/blob/master/ico/youtube.png
# ![ico25] [Переменные. Типы данных](var)
## ![ico20] Оператор _typeof_
Оператор `typeof` возвращает строку
Возможные значения, возвращаемые оператором `typeof`:
* `string`
* `number`
* `boolean`
* `object`
* `undefined`
* `function`
* `symbol`
![cap-20] Наберите в консоли:
```javascript
var x = 10
typeof x // "number"
```
А теперь выполните код в консоли:
```javascript
x = "google"
typeof x // "string"
```
Теперь выполните в консоли следующий код:
```javascript
var x = false
typeof typeof x // "boolean"
```
_____________________________________________________________
## ![ico25] string
Строки состоят из символов и заворачиваются в двойные ( *"мама"* ) или одинарные ( *'мама'* ) кавычки
Также можно завернуть строку в обратные кавычки **` ` `**
```javascript
var sample = `This is a sample`
```
Если внутри строки встречаются двойные кавычки, то сама строка должна быть завернута в одинарные, и наоброт
![cap-20]
```javascript
var first = 'Капитаном корабля "Наутилус" был Немо'
var second = "Капитаном корабля 'Наутилус' был Немо"
var third = `Капитаном корабля "Наутилус" был Немо`
```
_____________________________________________________________
## ![ico25] number
Число может быть:
* целым ( 5 )
* с плавающей точкой ( 5.80 )
* [**`Infinity`**](NaN-null-Infinity.md#infinity) ( бесконечность )
* [**`NaN`**](NaN-null-Infinity.md#NaN) ( Not a Number - не число )
![warn-25] Значение [**`Infinity`**](NaN-null-Infinity.md#infinity) может получиться при делении на ноль:
```javascript
var x = 1, y = 0
var z = x / y
```
Значением переменной z будет *Infinity*
![warn-25] Значение [**`NaN`**](NaN-null-Infinity.md#NaN) может получиться при попытке выполнения арифметических операций с операндами, которые не являются числами, например: ` 5 * "total" `, а так же при попытке разделить ноль на ноль: ` 0/0 `
![warn-25] Значение [**`NaN`**](NaN-null-Infinity.md#NaN) не равно никакому другому значению, включая само значение [**`NaN`**](NaN-null-Infinity.md#NaN)
![warn-25] Никакие арифметические операции в JS никогда не будут завершены с ошибкой, поскольку в случае ошибки операция вернет [**`NaN`**](NaN-null-Infinity.md#NaN)
________________________________________________________
## ![ico25] boolean
Логический тип
Данные логического типа могут принимать только одно из двух значений:
* `true` ( истина )
* `false` ( ложь )
_____________________________________________________________
## ![ico25] object
К данным типа `object` относятся:
* [**`объекты`**](data-structures.md#object)
* [**`массивы`**](data-structures.md#array)
* [**`null`**](NaN-null-Infinity.md#null)
________________________________________________________
## ![ico25] undefined
Специальный тип данных, означающий, что значение переменной не определено
![cap-20]
```javascript
var sample
console.log ( sample )
```
В консоль будет выведено `undefined`, поскольку мы не присвоили переменной **sample** никакого значения
________________________________________________________
## ![ico25] function
С помощью ключевого слова `function` создаются объекты, содержащие фрагмент кода
Объекты типа `function` являются контейнерами для скриптов
Если вывести в консоль такой объект
#### ![cap-20] 1
```javascript
function sample ( arg ) {
console.log ( arg )
}
console.log ( sample )
```
то мы увидим следующее:
```console
ƒ sample ( arg ) {
console.log ( arg )
}
```
Такие объекты имеют тип данных `function`
#### ![cap-20] 2
```javascript
function sample ( arg ) {
console.log ( arg )
}
console.log ( typeof sample ) // function
```
Особенность этого типа данных заключается в том, что в любой момент можно инициировать выполнение кода, находящегося в объекте, по его имени ( для этого необходимо после имени функции использовать круглые скобки )
#### ![cap-20] 3
```javascript
function sample () {
console.log ( "Привет, студент!" )
}
sample () // "Привет, студент!"
```
Мы будем подробнее изучать объекты типа function далее
_____________________________________________________________
### [![hw-30] Упражнения](https://docs.google.com/forms/d/e/1FAIpQLSdegQYfzld6s0CYJekJ2uvu84fUU2-BXiu7g9X2wzcutF1CWQ/viewform)