В динамическом мире JavaScript и его статически типизированной надстройки TypeScript понимание того, что представляет собой «ложное» или «нулевое» значение, может иметь решающее значение. Хотя легко догадаться, что такие значения, как 0 или пустая строка "", считаются «ложными», ситуация полна нюансов и крайних случаев, которые могут удивить даже опытных разработчиков. В этом подробном руководстве мы углубимся в исчерпывающий список значений «ложь» и «ничего», как в JavaScript, так и в TypeScript. Мы также включим пустые, но технически «правдивые» значения, поскольку иногда их можно ошибочно принять за «ложные».

Средний Джо может счесть это фальшивкой, но они просто пусты

  • []: Пустой массив; технически «правдивый», но его часто ошибочно принимают за «ложный».
  • {}: Пустой объект; технически «правдивый», но его часто ошибочно принимают за «ложный».

Значения JavaScript Zero-Like («Falsy»):

  • 0: целый ноль; оценивается как ложь в логическом контексте.
  • -0: отрицательный ноль; также имеет значение false в логическом контексте.
  • "": Пустая строка; считается «ложным».
  • null: представляет намеренное отсутствие какого-либо значения или объекта; «ложный».
  • undefined: указывает на неинициализированную переменную или отсутствие значения; «ложный».
  • NaN: означает «не число»; используется для неопределенных или непредставимых математических операций; «ложный».
  • false: логическое значение false; явно «ложный».
  • document.all: несколько архаичный и специфичный для браузера; «ложь», хотя typeof возвращает «объект».
  • BigInt 0n: нулевая версия BigInt; оценивается как ложь в логическом контексте.
  • void 0, void (любое выражение): представляет неопределенное значение; «ложный».

Значения TypeScript Zero-Like («Falsy»):

  • 0 и -0: целое число и отрицательный ноль; «ложные» ценности.
  • "": Пустая строка; «ложный».
  • null: Намеренное отсутствие какого-либо значения; «ложный».
  • не определено: неинициализированная переменная или отсутствие значения; «ложный».
  • NaN: не-число; «ложный».
  • false: логическое ложное значение; явно «ложный».
  • void 0, void (любое выражение): представляет неопределенное значение; «ложный».
  • 0n: версия нуля BigInt в TypeScript; «ложный».
  • Тип void: хотя этот тип и не является значением, он указывает, что функция не возвращает значения, а переменная этого типа может иметь только неопределенное или нулевое значение.

Различия и нюансы

И JavaScript, и TypeScript используют один и тот же набор «ложных» значений, поскольку TypeScript — это надмножество JavaScript.

В TypeScript есть концепция типа void, который чаще всего используется для обозначения того, что функция не должна возвращать какое-либо значение. Хотя void — это тип, undefine — это значение, которое может содержать тип void.

И JavaScript, и TypeScript имеют одинаковый набор «ложных» значений, учитывая, что TypeScript является расширенным набором JavaScript. Однако TypeScript вводит в эту смесь некоторые дополнительные типы и особенности, такие как тип void. Этот полный список служит основным руководством для понимания того, что оценивается как false в логическом контексте, а что нет, помогая разработчикам писать более надежный и предсказуемый код. Независимо от того, новичок ли вы или опытный разработчик, знание этих «ложных» и «нулевых» значений может уберечь вас от потенциальных ошибок и головокружительных моментов в дальнейшем.