Как по шагам логическое отрицание работает для строки?
Продвинутые темы
Логическое отрицание строки: `!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 без инверсии смысла.