Развёрнутое пояснение
1️⃣Функция 𝚐𝚛𝚎𝚎𝚝 вызывается с аргументом "" (пустая строка), поэтому параметр 𝚗𝚊𝚖𝚎 получает значение "".
2️⃣В строке 𝚗𝚊𝚖𝚎 = 𝚗𝚊𝚖𝚎 𝚘𝚛 "𝙶𝚞𝚎𝚜𝚝" оператор 𝚘𝚛 проверяет истинность левого операнда: пустая строка "" — falsy-значение.
3️⃣Так как левый операнд ложный, 𝚘𝚛 возвращает правый операнд "𝙶𝚞𝚎𝚜𝚝", и переменная 𝚗𝚊𝚖𝚎 перезаписывается.
4️⃣Функция возвращает "𝙷𝚎𝚕𝚕𝚘, 𝙶𝚞𝚎𝚜𝚝!", хотя намерение было — приветствовать пустым именем.
Почему это важно
Паттерн 𝚡 𝚘𝚛 𝚍𝚎𝚏𝚊𝚞𝚕𝚝 ломается для любых falsy-значений: 𝟶, "", [], 𝙽𝚘𝚗𝚎, 𝙵𝚊𝚕𝚜𝚎. Безопасная альтернатива — явная проверка: 𝚒𝚏 𝚗𝚊𝚖𝚎 𝚒𝚜 𝙽𝚘𝚗𝚎: 𝚗𝚊𝚖𝚎 = "𝙶𝚞𝚎𝚜𝚝".
Post #4582
968
- ✍ 4