Как переключить булевое значение?
Заголовок: Как легко переключать булево значение в JavaScript?
Описание проблемы: У меня есть булева переменная, и я ищу простой способ переключать ее значение. На данный момент лучшим решением, которое я смог найти, является использование тернарного оператора:
bool = bool ? false : true;
Однако мне хотелось бы узнать, есть ли более простой и элегантный способ сделать это в JavaScript?
5 ответ(ов)
В большинстве языков программирования присваивание bool = !bool;
инвертирует значение булевой переменной bool
.
Здесь !bool
— это логическое отрицание, которое меняет true
на false
и наоборот. Таким образом, после выполнения этой строки переменная bool
будет иметь противоположное значение. Следовательно, если bool
было true
, после выполнения операции оно станет false
, и наоборот.
Это стандартный способ изменения состояния булевой переменной во многих языках, таких как C, C++, Java, JavaScript и других.
Оператор !=
в данном выражении сравнивает значение переменной bool
с true
. Если bool
равно true
, то результат выражения будет false
, иначе — true
. В результате происходит "обратный" флип значения переменной bool
.
Таким образом, данная запись можно интерпретировать как инверсию значения переменной bool
. Если bool
было true
, станет false
, и наоборот.
Однако стоит отметить, что такой код может привести к путанице, так как имя переменной bool
совпадает с типом данных bool
. Рекомендуется использовать более описательное имя переменной.
Пример корректного использования:
isActive = isActive != true; // инвертирует значение переменной isActive
Такой подход будет более понятным для чтения и поддержки кода.
Если вы ищете способ переключения значения, который будет изменять начальное значение null
или undefined
на false
, можно использовать следующий код:
booly = !(booly != false);
Этот код работает следующим образом: сначала проверяется, не является ли booly
неравным false
. Если да, то выражение возвращает true
, и после применения операторов !
(логическое "не") переменная booly
будет равна false
. В противном случае, если booly
равен false
, то после операции !
она останется false
.
Таким образом, любой раз при установке booly
равного null
или undefined
, итоговое значение будет false
. Этот подход позволяет вам "переключить" начальные значения в нужный вам результат.
Это старая тема, но я думаю, обновление до ES6 будет полезным.
Обычно нам нужен тумблер, который сможет обрабатывать все без нарушения нашего кода.
Мы можем использовать начальное значение для null
или undefined
как false
.
Вот пример реализации:
const boolToggler = b => !(b ?? false)
let foo
console.log('foo:', foo) // undefined
foo = boolToggler(foo)
console.log('foo:', foo) // true (предполагает, что undefined - это 'false')
foo = boolToggler(foo)
console.log('foo:', foo); // false
let fee = null
console.log('fee:', fee) // null
fee = boolToggler(fee)
console.log('fee:', fee) // true (предполагает, что null - это 'false')
let faa = true
console.log('faa:', faa) // true
faa = boolToggler(faa)
console.log('faa:', faa); // false
В этом примере функция boolToggler
принимает переменную b
и возвращает ее логическое отрицание, если b
равно null
или undefined
, она будет трактоваться как false
, что позволяет сделать тумблер универсальным и безопасным для использования.
Данный код bool === tool ? bool : tool
использует тернарный оператор для проверки, равны ли значения двух булевых переменных bool
и tool
.
Если bool
и tool
имеют одинаковое значение (т.е. оба true
или оба false
), результатом будет значение bool
. Если они различаются (например, один из них true
, а другой false
), то вернётся значение tool
.
Если вам нужно, чтобы итоговое значение было true
, только если tool
имеет такое же значение, как и bool
, вы можете использовать другое выражение:
const result = (bool === tool) ? true : false;
Либо можно упростить это, просто возвращая булево выражение:
const result = (bool === tool);
Таким образом, переменная result
будет иметь значение true
, если tool
равен bool
, и false
в противном случае.
Как перенаправить на другую веб-страницу?
Где найти документацию по форматированию даты в JavaScript?
Как определить нажатие клавиши Esc?
Как проверить, содержит ли массив строку в TypeScript?
Ссылка и выполнение внешнего JavaScript-файла, размещенного на GitHub