Целые типы (целое число) часто вызывают некоторые странные проблемы в JavaScript. В спецификации ECMASCRPE они существуют только в концепции:
Все числа представляют собой номера с плавающими точками, а у чисел просто нет набора чисел без десятичных десятиц.
В этом блоге я объясню, как проверить, является ли значение целым числом.
Ecmascript 5
Есть много способов использовать в ES5. Иногда вы можете использовать свой собственный метод: функция Isinteger (x), которая возвращает True, если это целое число, в противном случае возвращает False.
Давайте посмотрим на некоторые примеры.
Пройти проверку оставшихся
Вы можете использовать оставшуюся операцию (%) и рассчитать оставшуюся часть на 1, чтобы увидеть, является ли остаток 0.
Функция isInteger (x) {return x % 1 === 0;}Мне нравится этот метод, потому что он очень просто и эффективен.
> Isinteger (17) True> Isinteger (17.13) false
Вы должны быть осторожны при эксплуатации оставшихся операций, потому что результат зависит от признака первого числа. Если это положительно, результат положительный; в противном случае это отрицательно.
> 3,5 % 10,5> -3,5 % 1-0,5
Затем мы также можем проверить 0, что на самом деле не является проблемой. Но проблема в том, что этот метод также вернет истину для не дигитов, потому что % преобразует его в число:
> isInteger ('') true> isinteger ('33') true> isinteger (false) true> isinteger (true) trueЭто может быть решено с помощью простой проверки типа:
Функция isInteger (x) {return (typeof x === 'number') && (x % 1 === 0);}По math.round () Если число закруглено и все еще имеет то же значение, что и предыдущее, то это целое число. В JavaScript вы можете проверить это через Math.round ():
Функция isInteger (x) {return math.round (x) === x;}Этот метод тоже хорош
> Isinteger (17) True> Isinteger (17.13) false
Он также может судить о нематчике, потому что Math.Round () всегда возвращает числа и === возвращает true только в том случае, если тип одинаков.
> isInteger ('') falseЕсли вы хотите прояснить код, вы можете добавить проверку типов (это то, что мы сделали в предыдущей версии). Кроме того, math.floor () и math.ceil () может работать как Math.round (). Проверка операторов битов с помощью операций битов обеспечивает еще один метод «округления»:
Функция isInteger (x) {return (x | 0) === x;}Это решение (как и другие битовые операции) имеет один недостаток: оно не может обрабатывать числа, которые превышают 32 бита.
> Isinteger (Math.pow (2, 32)) false
Проверка parseint () через Parseint () также предоставляет аналогичный метод Math.Round () для преобразования чисел в целые числа. Посмотрим, почему этот метод хорош.
Функция isInteger (x) {return parseint (x, 10) === x;}Как и решение Math.Round (), оно может обрабатывать нецелевые случаи, но также не обрабатывает все целочисленные числа правильно:
> Isinteger (100000000000000000000000000) FALSE
Почему? Parseint () заставляет первого параметра проанализировать в строку перед анализом целого числа. Следовательно, использование этого метода для преобразования чисел в целые числа не является хорошим выбором.
> Parseint (100000000000000000000000000, 10) 1> Строка (10000000000000000000000000) '1E+21'
Как и выше, ParseInt () прекращает обработку при 1 при анализе «1E+21», поэтому он возвращает 1. Ecmascript 6 для Math.Round () добавление (), ES6 предоставляет другой метод для преобразования чисел в целые числа: math.trunc (). Эта функция удаляет дробную часть числа.
> Math.trunc (4.1) 4> math.trunc (4.9) 4> math.trunc (-4.1) -4> math.trunc (-4.9) -4
Кроме того, Ecmascript6 не нужно иметь дело с тривиальными задачами, которые проверяют целые числа, потому что он поставляется со встроенным номером функции.isinteger ().