Есть ли более эффективный или в целом лучший способ определить, является ли число целым числом, чем этот?

#javascript #integer

#javascript #целое

Вопрос:

Прямо сейчас я использую эту функцию, чтобы определить, является ли число целым числом:

 function isInteger(input){
    return (input%1==0);
}
  

есть ли более эффективный способ сделать это? Я знаю, что для этого есть встроенная функция javascript, но она не работает в определенных версиях IE.

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

1. Вот более эффективный способ сделать это: ссылка

2. может быть, вы хотите использовать return typeof input === 'number' , это поддерживается IE, проверьте MDN

3. @VitaliiStrimbanu число не обязательно является целым числом, например, посмотрите на 3.14 .

4. @vlaz спасибо, что указали на это, мой плохой.

Ответ №1:

Согласно jsPerf, ~~ (повторяется побитово НЕ) и << 0 (сдвиг влево на 0 бит) выполняются быстрее в моем браузере:

 function isInteger(input) {
  return (~~input === input);
}

function isInteger2(input) {
  return (input << 0 === input);
}
  

ПРЕДУПРЕЖДЕНИЕ: побитовые операторы JavaScript приводят свои операнды к 32-разрядным целым числам со знаком, поэтому этот метод безопасен только для чисел до Math.pow(2, 31) -1 (2147483647). Используйте другой метод, если вы не можете этого гарантировать.

Из других методов n % 1 === 0 и Math.floor(value) === value на 40-50% медленнее и Number.isInteger сильно отстают.

Однако все они выполняются «довольно быстро». Если вам не нужно проверять много чисел, ни один из этих методов, скорее всего, не будет узким местом в вашем приложении.

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

1. ПОБИТОВОЕ NOT ИСПОЛЬЗОВАНИЕ ОПАСНО! Побитовая числовая арифметика обрабатывает любое число как 32-битное, поэтому при больших числах вы получите переполнение ~~10000000000// 1410065408

Ответ №2:

 function isInteger(input){
    Number.isInteger(input)
}

Number.isInteger = Number.isInteger || function(value) {
  return typeof value === "number" amp;amp; 
    isFinite(value) amp;amp; 
    Math.floor(value) === value;
};
  

источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger#Polyfill

Ответ №3:

 function isInt(val) {
    return val   0 === val;
}
  

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

1. Но 1.5 0 === 1.5