add js-base, functions

This commit is contained in:
2025-02-27 15:52:06 +03:00
parent e8fe7c6f0c
commit 698358afaf
33 changed files with 710 additions and 3 deletions

View File

@@ -0,0 +1,177 @@
---
sidebar_position: 6
---
# Условия и логические операторы
## Условное ветвление: if, '?'
Инструкция if(...) вычисляет условие в скобках и, если результат true, то выполняет блок кода.
***Несколько условий: «else if»***
## Конструкция "switch"
```
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Маловато' );
break;
case 4:
alert( 'В точку!' );
break;
case 5:
alert( 'Перебор' );
break;
default:
alert( "Нет таких значений" );
}
```
## Условный оператор „?“ (тернарный)
```
let result = условие ? значение1 : значение2;
```
## Логические операторы
В JavaScript есть семь логических операторов:
- || (ИЛИ)
- ||= (Оператор логического присваивания ИЛИ)
- && (И)
- &&= (Оператор логического присваивания И)
- ! (НЕ)
- ?? (Оператор нулевого слияния)
- ??= (Оператор нулевого присваивания)
### || (ИЛИ)
```
( true || true ); // true
( false || true ); // true
( true || false ); // true
( false || false ); // false
```
### ИЛИ "||" находит первое истинное значение
```
( 1 || 0 ); // 1 (1 - истинное значение)
( true || 'какая-то строка' ); // true
( null || 1 ); // 1 (первое истинное значение)
( null || 0 || 1 ); // 1 (первое истинное значение)
( undefined || null || 0 ); // 0 (поскольку все ложно, возвращается последнее значение)
```
### ||= (Логическое присваивание ИЛИ)
```
a ||= b;
```
Оператор **||=** принимает два операнда и выполняет следующие действия:
- Вычисляет операнды слева направо.
- Конвертирует ***a*** в логическое значение.
- Если ***a*** ложно, присваивает ***a*** значение ***b***.
### && (И)
```
( true && true ); // true
( false && true ); // false
( true && false ); // false
( false && false ); // false
```
#### И «&&» находит первое ложное значение
```
result = value1 && value2 && value3;
```
Оператор **&&** выполняет следующие действия:
- Вычисляет операнды слева направо.
- Каждый операнд преобразует в логическое значение. Если результат **false**, останавливается и возвращает исходное
значение этого операнда.
- Если все операнды были истинными, возвращается последний.
Другими словами, **И** возвращает первое ложное значение. Или последнее, если ничего не найдено.
Вышеуказанные правила схожи с поведением **ИЛИ**. Разница в том, что **И** возвращает первое ложное значение, а **ИЛИ**
первое истинное.
***Приоритет оператора && больше, чем у ||*** \
Приоритет оператора **И &&** больше, чем **ИЛИ ||**, так что он выполняется раньше.
Таким образом, код **a && b || c && d** по существу такой же,
как если бы выражения **&&** были в круглых скобках: **(a && b) || (c && d)**
***Не заменяйте if на || или &&*** \
Несмотря на то, что вариант с && кажется более коротким, if более нагляден и, как правило, более читабелен.
### &&= (Логическое присваивание И)
```
a &&= b;
```
Принцип действия **&&=** практически такой же, как и у оператора логического присваивания **ИЛИ ||=**. \
Единственное отличие заключается в том, что **&&=** присвоит **a** значение **b** только в том случае, если **a**
истинно.
### ! (НЕ)
```
result = !value;
```
Оператор принимает один аргумент и выполняет следующие действия:
1. Сначала приводит аргумент к логическому типу **true/false**.
2. Затем возвращает противоположное значение.
❗ Приоритет **НЕ !** является наивысшим из всех логических операторов, поэтому он всегда выполняется первым, перед **&&
** или **||**.
### Оператор нулевого слияния (??)
Результат выражения **a ?? b** будет следующим:
- если **a** определено, то **a**,
- если **a** не определено, то **b**.
Иначе говоря, оператор **??** возвращает первый аргумент, если он не **null/undefined**, иначе второй.
#### Сравнение с ||
Важное различие между ними заключается в том, что:
- || возвращает первое истинное значение.
- ?? возвращает первое определённое значение.
Приоритет оператора ?? такой же, как и у ||. Они оба равны 3 в таблице на MDN.
#### Использование ?? вместе с && или ||
По соображениям безопасности JavaScript запрещает использование оператора **??** вместе с **&&** и **||**, если
приоритет явно не указан при помощи круглых скобок.
```
let x = 1 && 2 ?? 3; // Синтаксическая ошибка
```
Используйте скобки, чтобы обойти это ограничение:
```
let x = (1 && 2) ?? 3; // Работает без ошибок
```
### Оператор нулевого присваивания (??=)
Предположим, нам необходимо проверить, равна ли переменная null или undefined, и если это так — присвоить этой
переменной какое-либо другое значение.
```
let userAge = null;
if (userAge === null || userAge === undefined) {
userAge = 18;
}
```
Выглядит громоздко, правда? Существует оператор, более подходящий для подобных задач.
```x ??= y```
Оператор **??=** присвоит **x** значение **y** только в том случае, если **x** не определено (null/undefined).
```
let userAge = null;
userAge ??= 18;
alert(userAge) // 18
```