Это просто как:
if( n === parseInt(n) ) ...
Попробуйте это в консоли:
x=1;
x===parseInt(x); // true
x="1";
x===parseInt(x); // false
x=1.1;
x===parseInt(x); // false, obviously
// BUT!
x=1.0;
x===parseInt(x); // true, because 1.0 is NOT a float!
Это смущает многих людей. Всякий раз, когда что-то .0, это больше не плавание. Это целое число. Или вы можете просто назвать это «числовой вещью», потому что нет строгого различия, как тогда, в C. Старые добрые времена.
Таким образом, в принципе, все, что вы можете сделать, это проверить целое число, приняв тот факт, что 1.000 является целым числом.
Интересное примечание
Был комментарий об огромных числах. Огромные цифры не означают никаких проблем для этого подхода; всякий раз, когда parseInt не может обработать число (потому что оно слишком большое), оно возвращает что-то другое, чем фактическое значение, поэтому тест возвращает FALSE. Это хорошо, потому что если вы считаете что-то «числом», вы обычно ожидаете, что JS сможет рассчитать с ним - так что да, числа ограничены, и parseInt примет это во внимание , чтобы выразить это способ.
Попробуйте это:
<script>
var a = 99999999999999999999;
var b = 999999999999999999999; // just one more 9 will kill the show!
var aIsInteger = (a===parseInt(a))?"a is ok":"a fails";
var bIsInteger = (b===parseInt(b))?"b is ok":"b fails";
alert(aIsInteger+"; "+bIsInteger);
</script>
В моем браузере (IE8) это возвращает "a в порядке; b терпит неудачу", что именно из-за огромного числа в b. Предел может варьироваться, но я думаю, что 20 цифр "должно быть достаточно для всех", чтобы процитировать классический :))