#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) Все тесты проходит.
Комментариев нет:
Отправить комментарий