PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как по шагам логическое отрицание работает для строки?

Продвинутые темы

Логическое отрицание строки: `!str`. Непустая строка — truthy, поэтому `!str` = false; пустая строка `''` — falsy, поэтому `!''` = true.

По шагам

Шаг 1 — строка приводится к boolean

! сначала приводит операнд к булеву значению по правилам truthy/falsy:

  • Непустая строка ('hello', '0', 'false', ' ') → truthy → true.
  • Пустая строка ('') → falsy → false.

Шаг 2 — инвертирование

! инвертирует полученное булево:

!'hello';  // truthy → true → инверсия → false
!'';       // falsy → false → инверсия → true
!'0';      // '0' truthy (непустая!) → true → false
!' ';      // пробел truthy → false

Нюансы

Строки с «ложным» содержимым всё равно truthy (важна непустота, не содержимое):

!'false';  // false — строка 'false' непустая → truthy
!'0';      // false — '0' непустая → truthy
!'null';   // false — непустая

Только пустая строка falsy.

Двойное отрицание

!!str приводит к boolean (не инвертируя смысл):

!!'hello'; // true (непустая)
!!'';      // false (пустая)
Boolean(str) === !!str;

Практика

if (!str) {
  // строка пустая (или null/undefined)
}
if (str) {
  // строка непустая
}

Коротко для собеседования

!str: шаг 1 — строка приводится к boolean (непустая → truthy, пустая '' → falsy); шаг 2 — инвертирование. Итог: !'hello' = false, !'' = true. Нюанс: важна непустота, а не содержимое — !'0' и !'false' = false (непустые строки truthy). Только '' falsy. !!str приводит к boolean без инверсии смысла.

Другие вопросы раздела