Обработка NaN от parseInt в JavaScript: возвращаем 0

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы в результате обработки пустой строки при помощи parseInt появлялся не NaN, а ноль, используйте оператор сложения с нулём (??):

JS
Скопировать код
const result = parseInt('') ?? 0;
console.log(result); // Вернет 0, NaN не пройдет

Оператор ?? используется для предотвращения появления неожиданных результатов при обработке null или undefined. Этот оператор не заменяет ложные значения, такие как 0, помогая избежать путаницы.

Кинга Идем в IT: пошаговый план для смены профессии

Рассчитывайте на надежность Number()

Функция Number() превращает строки в числа непосредственно и воспринимает пустые строки как 0:

JS
Скопировать код
const result = Number('');
console.log(result); // Вернет 0, всё просто и ясно

Number() позволяет эффективно обходить сложности преобразования, с которыми можно столкнуться при использовании parseInt.

Поразрядное ИЛИ: Безукоризненно, но точно

Для лаконичности и упрощения можно применить поразрядное ИЛИ:

JS
Скопировать код
const result = (parseInt('') | 0);
console.log(result); // Вернет 0, и все прощай, NaN!

Заметим, что этот метод предпочитает целочисленные значения, подобно тому как TypeScript использует типы в JavaScript.

Создайте вспомогательную функцию

Создайте собственную вспомогательную функцию для многократной и стабильной обработки NaN:

JS
Скопировать код
function parseToIntOrZero(str) {
    const parsed = parseInt(str);
    return isNaN(parsed) ? 0 : parsed;  // Станьте тем изменением (NaN), которое хотите видеть в мире
}

Такой подход пригодится во многих частях вашего приложения – максимальная эффективность при сокращении времени.

Визуализация

Преобразование NaN от parseInt для пустой строки в 0 можно изобразить так:

Markdown
Скопировать код
Вызов функции:         | parseInt('') | parseInt('42') | parseInt('abc') |
                       |--------------|----------------|-----------------|
Ожидаемый результат:   |      0       |       42       |       NaN       |

А применяя специализированную функцию:

JS
Скопировать код
const safeParseInt = (str) => str ? parseInt(str) : 0;

Результаты становятся предсказуемыми:

Markdown
Скопировать код
Вызов функции:             | safeParseInt('') | safeParseInt('42') | safeParseInt('abc') |
                           |------------------|--------------------|---------------------|
Гарантированный результат: |        0         |        42          |         NaN         |

Теперь процесс становится определенным: пустая строка превращается в 0.

Особенности неявных преобразований и условных операторов

Важно понимать, как 0 воспринимается как ложное значение при работе с условными выражениями:

JS
Скопировать код
const number = parseInt(s) || 0;      // Превратит 0 в ложное значение
const safeNumber = Number(s) || 0;    // Ведет на правильный путь

Более надежным будет использование конструктора Number() или поразрядного ИЛИ, чтобы 0 считался истинным значением.

Зачем вообще преобразовывать строки?

Задайте себе вопросы:

  • Нужна ли мне точность до целого числа?
  • Должен ли я учитывать пробелы в строках?
  • Какую методику проверки ввода я выбираю?

Ответы на эти вопросы помогут вам выбрать подходящий метод.

Полезные материалы

  1. parseInt() – JavaScript | MDN — Глубокое погружение в особенности функции parseInt в JavaScript.
  2. Java – How to avoid "Illegal type in constant pool" error – Stack Overflow — Как избегать ошибок типов и других тонкостей в Java.
  3. Performance – Preferred Method to Store PHP Arrays – Stack Overflow — Обсуждение лучших практик хранения данных в PHP и их эффективности.
  4. [JavaScript: The Good Parts [Book]](https://www.oreilly.com/library/view/javascript-the-good/9780596517748/) — Книга для тех, кто хочет глубже изучить JavaScript, подобно героическому эпосу.
  5. JS Comparison Table — Инфографика, наглядно демонстрирующая механизмы приведения типов и сравнения в JavaScript.
  6. ECMAScript® 2019 Language Specification — Эталон спецификации языка ECMAScript 2019.