Логические операторы && и || работают с величинами разных типов очень странным образом. Они преобразуют величину с левой стороны оператора в булевскую, чтобы понять, что делать дальше, но в зависимости от оператора и от результата этого преобразования, возвращают оригинальное значение либо левой, либо правой части. К примеру, || вернёт значение с левой части, когда его можно преобразовать в true – а иначе вернёт правую часть. console.log(null || "user") // → user console.log("Karl" || "user") // → Karl Такая работа оператора || позволяет использовать его как откат к значению по умолчанию. Если вы дадите ему выражение, которое может вернуть пустое значение слева, то значение справа будет служить заменой на этот случай. Оператор && работает сходным образом, но наоборот. Если величина слева преобразовывается в false, он возвращает эту величину, а иначе – величину справа. Ещё одно важное их свойство – выражение в правой части вычисляется только при необходимости. В случае true || X неважн