# Условия, Boolean, Логические операторы ## **Присвоение** ## Типы данных JS ### Числа. Вы уже знакомы с числами: ```javascript var b = 5 var c = 6.57 var myPi = Math.PI ``` В JS для целых и дробных существует единый тип `Number`. Так же этот тип имеет специальные значения `NaN` (Not A Number) и `Infinity` (бесконечность). ```javascript 4/"asdf" // бессмысленное выражение, как результат - NaN ``` ```javascript 15/0 // на ноль делить нельзя, но в высшей математике - можно :-) ``` ### Строки Строка - тип `String`. Некое множество символов. Для перевода строки в число используйте `+` или `parseInt` ( для целых ) или `parseFloat` ( для чисел с дробной частью ) ```javascript var someString = "foo"; var concatenatedString = someString + " bar"; var stringWithNumberInside = "123"; var integerNumberByString = +stringWithNumberInside; var floatNumberByString = parseFloat("-15.15"); ``` ### Boolean `true` (правда) или `false` (ложь) В основном используется для двух задач: - Та или иная переменная-флаг для внутреннего использования. Например `isLoggedIn` может показывать залогинен пользователь на сайте или нет: ```javascript var IsLoggedIn = true var IsLoggedIn = false ``` - Как результат той или иной логической операции: ```javascript var isLoggedIn = (password == rightPassword) && (login == rightLogin) //пользователь залогинен, если пароль и логин совпадают с верными var isUserOldEnoughToSeeTheAdultVideos = age > 18 // пользователь может смотреть видео, если ему больше 18 лет. ``` То или иное логическое выражение может использоваться в условиях, которые делают или не делают определенные операции в зависимости от истинности условия. ### Object Объект. Сложная структура данных, которая в одной переменной может объединять данные других типов и операции над ними. Будет рассмотрено на следующих занятиях. ```javascript var person = { name: "Ivan", surname: "Ivanov", age: 25 } ``` ### `undefined` Если что-то в Javascript не определено, то это, обычно, `undefined`: ```javascript var a; //значение a - undefined ``` `undefined` - это и тип, и единственное его значение. ### `null` `null` - в целом аналогичен `undefined`, но предназначен для использования его программистом. Т. е. если вы хотите пометить переменную как *пустую* - используйте `null` ## Операции сравнения и булевы операции. Каждая переменная или *литеральное значение* могут быть предметом сравнения с другими значениями: ### Равенство ```javascript 1 == 2 1 != 2 1 == 1 1 != 1 "text" == 5 "text" != 5 "text" == "Text" "text" == "text" true == "true" true == false false == 0 false === 0 "" == false "" !== false ``` ### Больше, меньше... ```javascript 5 > 6 6 > 5 5.0 >= 5 "a" < "b" "b" <= "a" ``` Результатом таких операций является значение типа `Boolean`, то есть `true` или `false` ### Логические операции #### **Не** `!` ```javascript 5 == 5 5 != 5 !true !false !(5 == 5) !(5 != 5) !!0 ``` Как видите, **не** позволяет инвертировать булево значение. *Двойное не* позволяет получить *приведенное к типу* `Boolean` значение переменной. #### **Или** `||` **Или** позволяет объединять несколько булевых значений в одно, по следующей логике: **Если A или B истинно**, то результат - истина. Иначе - результат ложный: ```javascript var isDrunk = isDrunkByBeer || isDrunkByVodka //если пили или водку, или пиво, все равно пьяные :-) var isFlyable = isFly || isBird || isAircraft //что-то может летать, если это нечто - самолет, муха или птица, не важно что это. ``` Таблица истинности: | A | B | | | ------ | ----- | --- | | false | false | false | | true | false | true | | false | true | true | | true | true | true | #### **И** `&&` **И** требует что бы ВСЕ операнды были истинны, иначе результат ложен: ```javascript var isBodun = isDrunkByBeer && isDrunkByVodka //если пили и водку, и пиво, то бодун :-) var isYoung = age > 16 && age < 30 // человек молод от 16 до 30. ``` Таблица истинности: | A | B | | | ------ | ----- | --- | | false | false | false | | true | false | false | | false | true | false | | true | true | true |