Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Проверка на число JS

#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) Все тесты проходит.

Комментариев нет:

Отправить комментарий