Вопрос проверяет понимание логических операторов JavaScript и их влияния на корректность работы кэша.
Проверка через falsy ломается, когда закэшированное значение является допустимым, но логически ложным. Значения 0, false, '' и null интерпретируются как отсутствие данных. В результате кэш игнорируется и данные пересчитываются заново. Это приводит к лишним вычислениям и логическим ошибкам. Проблема часто остаётся незаметной.
В JavaScript многие значения приводятся к false в логическом контексте, и это создаёт скрытые проблемы при работе с кэшем.
К falsy-значениям относятся:
false
0
''
null
undefined
NaN
Если кэш хранит такие значения, проверка вида:
if (cache[key]) {
return cache[key]
}
работает некорректно, потому что:
значение в кэше есть
но условие не выполняется
Повторные вычисления
Данные пересчитываются, хотя уже есть в кэше.
Нарушение бизнес-логикиfalse или 0 могут быть валидным результатом, но воспринимаются как отсутствие значения.
Трудные для поиска баги
Ошибка проявляется только при конкретных данных.
Нужно проверять сам факт наличия ключа:
if (key in cache) {
return cache[key]
}
или сравнивать с undefined.
Проверка через falsy небезопасна для кэша. Корректнее проверять наличие ключа, а не логическое значение данных.