Обработка NaN от parseInt в JavaScript: возвращаем 0
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы в результате обработки пустой строки при помощи parseInt
появлялся не NaN, а ноль, используйте оператор сложения с нулём (??
):
const result = parseInt('') ?? 0;
console.log(result); // Вернет 0, NaN не пройдет
Оператор ??
используется для предотвращения появления неожиданных результатов при обработке null
или undefined
. Этот оператор не заменяет ложные значения, такие как 0
, помогая избежать путаницы.
Рассчитывайте на надежность Number()
Функция Number()
превращает строки в числа непосредственно и воспринимает пустые строки как 0
:
const result = Number('');
console.log(result); // Вернет 0, всё просто и ясно
Number()
позволяет эффективно обходить сложности преобразования, с которыми можно столкнуться при использовании parseInt
.
Поразрядное ИЛИ: Безукоризненно, но точно
Для лаконичности и упрощения можно применить поразрядное ИЛИ:
const result = (parseInt('') | 0);
console.log(result); // Вернет 0, и все прощай, NaN!
Заметим, что этот метод предпочитает целочисленные значения, подобно тому как TypeScript
использует типы в JavaScript
.
Создайте вспомогательную функцию
Создайте собственную вспомогательную функцию для многократной и стабильной обработки NaN:
function parseToIntOrZero(str) {
const parsed = parseInt(str);
return isNaN(parsed) ? 0 : parsed; // Станьте тем изменением (NaN), которое хотите видеть в мире
}
Такой подход пригодится во многих частях вашего приложения – максимальная эффективность при сокращении времени.
Визуализация
Преобразование NaN от parseInt
для пустой строки в 0
можно изобразить так:
Вызов функции: | parseInt('') | parseInt('42') | parseInt('abc') |
|--------------|----------------|-----------------|
Ожидаемый результат: | 0 | 42 | NaN |
А применяя специализированную функцию:
const safeParseInt = (str) => str ? parseInt(str) : 0;
Результаты становятся предсказуемыми:
Вызов функции: | safeParseInt('') | safeParseInt('42') | safeParseInt('abc') |
|------------------|--------------------|---------------------|
Гарантированный результат: | 0 | 42 | NaN |
Теперь процесс становится определенным: пустая строка превращается в 0
.
Особенности неявных преобразований и условных операторов
Важно понимать, как 0
воспринимается как ложное значение при работе с условными выражениями:
const number = parseInt(s) || 0; // Превратит 0 в ложное значение
const safeNumber = Number(s) || 0; // Ведет на правильный путь
Более надежным будет использование конструктора Number()
или поразрядного ИЛИ, чтобы 0
считался истинным значением.
Зачем вообще преобразовывать строки?
Задайте себе вопросы:
- Нужна ли мне точность до целого числа?
- Должен ли я учитывать пробелы в строках?
- Какую методику проверки ввода я выбираю?
Ответы на эти вопросы помогут вам выбрать подходящий метод.
Полезные материалы
- parseInt() – JavaScript | MDN — Глубокое погружение в особенности функции
parseInt
в JavaScript. - Java – How to avoid "Illegal type in constant pool" error – Stack Overflow — Как избегать ошибок типов и других тонкостей в Java.
- Performance – Preferred Method to Store PHP Arrays – Stack Overflow — Обсуждение лучших практик хранения данных в PHP и их эффективности.
- [JavaScript: The Good Parts [Book]](https://www.oreilly.com/library/view/javascript-the-good/9780596517748/) — Книга для тех, кто хочет глубже изучить JavaScript, подобно героическому эпосу.
- JS Comparison Table — Инфографика, наглядно демонстрирующая механизмы приведения типов и сравнения в JavaScript.
- ECMAScript® 2019 Language Specification — Эталон спецификации языка ECMAScript 2019.