Modern JS Cheatsheet / Памятка по современному JavaScript: Истина / Ложь

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

### Истина / Ложь

a_popova 05.10.17 в 15:59

0
+1

В JavaScript "истинность" или "ложность" значения определяется при вычислении этого значения в булевом контексте. Примером булева контекста может быть вычисление в условии ```if```:

a_popova 05.10.17 в 16:00

0

Любое значение будет приведено к ```true (истина)```, кроме:

a_popova 05.10.17 в 16:00

0

- false (ложь)
- 0
- "" (пустая строка)
- null
- undefined
- NaN

a_popova 05.10.17 в 16:01

0

Вот примеры *булева контекста*:

a_popova 05.10.17 в 16:01

0

- значение условия ```if```
```js
if (myVar) {}
```

a_popova 05.10.17 в 16:02

0

Значение ```myVar``` может быть любым [объектом первого класса](https://en.wikipedia.org/wiki/First-class_citizen) (переменная, функция, логическое значение), но оно будет переведено в логическое значение, поскольку оно вычисляется в булевом контексте.

a_popova 05.10.17 в 16:02

0

- После логического оператора **NOT** ```!```

a_popova 05.10.17 в 16:03

0

Этот оператор возвращает значение "ложь", если его единственный операнд может быть преобразован к значению "истина"; иначе он возвращает значение "истина".

a_popova 05.10.17 в 16:03

0

```js
!0 // "истина" -- 0 - это "ложь", поэтому вернется "истина"
!!0 // "ложь" -- 0 - это "ложь", следовательно !0 возвращает истину, а !(!0) возвращает "ложь"
!!"" // "ложь" -- пустая строка - "ложь", поэтому НЕ (НЕ "ложь") равно "истина"
```

a_popova 05.10.17 в 16:04

0

- Конструктор объектов типа *Boolean*

a_popova 05.10.17 в 16:05

0

```js
new Boolean(0) // "ложь"
new Boolean(1) // "истина"
```

a_popova 05.10.17 в 16:06

0

- Тернарный оператор

a_popova 05.10.17 в 16:06

0

```js
myVar ? "истина" : "ложь"
```

a_popova 05.10.17 в 16:06

0

Значение myVar вычисляется в булевом контексте.

a_popova 05.10.17 в 16:06

0
Минутку...