#javascript
Сделал функцию проверки на число:
function isAN(value) {
return isFinite(value) && value === parseInt(value, 10);
}
Всё работает, но один тест не могу пройти:
new Number()s
✘ isAN(new Number(1)) - Expected: true, instead got: false
Как мне добавить условие чтобы такая проверка проходила?
isAN(new Number(1)) // сейчас false а хочется true
Все тесты:
Strings - Test.assertEquals( isAN("2") , false)
Booleans - Test.assertEquals( isAN(true) , false)
Others - Test.assertEquals( isAN(null) , false)
Numbers - Test.assertEquals( isAN(2) , true)
new Number()s - Test.assertEquals( isAN(Number(1)) , true)
NaN Number()s - Test.assertEquals( isAN(NaN), false)
Ответы
Ответ 1
Создавать ручками объект примитива - примитивизм. Но, раз зачем-то эта возможность есть, делайте проверку: function isAN(value) { if(value instanceof Number) value = value.valueOf(); // Если это объект числа, то берём значение, которое и будет числом return isFinite(value) && value === parseInt(value, 10); } console.info(isAN(1)); console.info(isAN(new Number(1))); console.info(isAN(null));Ответ 2
function isAN(value) { return (value instanceof Number||typeof value === 'number') && !isNaN(value); } console.info(isAN(1)); console.info(isAN(new Number(1))); console.info(isAN(null)); console.info(isAN("1")); console.info(isAN(true));Ответ 3
А почему не использовать связку с parseInt или parseFloat: if(parseInt(value) >= 0 || parseInt(value) <= 0) Все тесты проходит.
Комментариев нет:
Отправить комментарий