Определение четности числа в JavaScript: полное руководство
Быстрый ответ
Для выявления нечетности числа в JavaScript обычно применяется оператор остатка от деления (%
). Число считается нечетным, если остаток от его деления на 2
равен 1
.
const isOdd = num => num % 2 == 1;
Пример использования этой функции:
console.log(isOdd(5)); // true
console.log(isOdd(8)); // false
Эффективность и альтернативы
Оператор остатка от деления — это стандартный способ решения такого рода проблем. Однако в JavaScript существует и альтернативный метод с применением побитового оператора И (&
). Он может быть более быстрой и не менее надежной альтернативой.
const isOdd = num => (num & 1) === 1; // "& 1" — проверка на нечетность
Внимательность к деталям
Проверка входных данных – это обязательная часть написания программ на JavaScript. Недостаточно внимательная проверка может привести к непредсказуемым результатам при работе с дробными числами:
console.log(isOdd(4.5)); // false... но разве 4.5 можно назвать ни четным, ни нечетным!
Для того чтобы корректно обработать такие ситуации, проверьте, действительно ли число является целым:
const isOdd = num => Number.isInteger(num) && num % 2 !== 0; // Так совершенно точно будет верно
Визуализация
Представьте себе набор чисел, наша задача состоит в том, чтобы отобрать среди них нечетные:
function isOdd(num) { return num % 2 !== 0; } // "Охранник", выбирающий нужные числа
И вот перед нами процессия цифр:
0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣
Мы должны вручить им "значки нечетности":
[⁉️, 🎫, ⁉️, 🎫, ⁉️, 🎫, ⁉️, 🎫, ⁉️, 🎫]
Числа, получившие значки, и будут нечетными! Вот так наглядно выглядит принцип работы num % 2 !== 0
.
Важность производительности
Использование оператора остатка от деления обычно является интуитивно понятным, однако вопросы эффективности изредка становятся объектом обсуждения. Давайте сравним эффективность в реальных условиях:
Остаток от деления против побитовой операции
function isOddModulus(num) { // Традиционный подход
return num % 2 !== 0;
}
function isOddBitwise(num) { // Современный подход
return (num & 1) === 1;
}
Хотя побитовая операция может оказаться совсем немного быстрее, разница обычно бывает незначительной для большинства задач.
Написание надежного кода
При создании функций важно, чтобы они надежно работали с различными входными данными и обеспечивали стабильную производительность:
function isOdd(num) {
if (typeof num !== 'number' || !Number.isInteger(num)) {
throw new Error('Аргумент должен быть целым числом'); // Выдаем исключение при неправильных данных
}
return (num & 1) === 1;
}
Эта функция не только проверяет число на нечетность, но и производит его валидацию.
Полезные материалы
- Remainder (%) – JavaScript | MDN — Подробное описание оператора остатка от деления в JavaScript.
- typeof – JavaScript | MDN — Оператор, позволяющий определить тип данных, полезен для валидации входных значений.
- Number – JavaScript | MDN — Информация о объекте Number в JavaScript.
- Type Conversions — Руководство по конвертации типов в JavaScript.
- Basic operators, maths — Обзор основных операторов в JavaScript с упором на оператор остатка от деления.
- JavaScript Numbers — Учебник по теме чисел и математических операций в JavaScript.