Я єдиний, хто прочитав це і зрозумів, що жодна з відповідей не стосується "цілочисельної" частини питання?
Проблема
var myInteger = 6;
var myFloat = 6.2;
if( myInteger > 0 )
if( myFloat > 0 )
Рішення
Щоб гарантувати, що ви маєте справу з цілим числом, ви хочете передати своє значення цілому, а потім порівняти його із самим собою.
if( parseInt( myInteger ) == myInteger && myInteger > 0 )
if( parseInt( myFloat ) == myFloat && myFloat > 0 )
Деякі акуратні оптимізації
Як бонус, є кілька ярликів для перетворення з плаваючого в ціле число в JavaScript . В JavaScript все бітові операції ( |, ^, &і т.д.) будуть відкидати свій номер в ціле перед початком роботи. Я припускаю, що це тому, що 99% розробників не знають стандарту IEEE з плаваючою комою і можуть жахливо заплутатися, коли "200 | 2" оцінюється як 400 (ish). Ці ярлики , як правило, працюють швидше , ніж Math.floorабо parseInt, і вони займають менше байтів , якщо ви намагаєтеся тягнуть найменший можливий код:
if( myInteger | 0 == myInteger && myInteger > 0 )
if( myFloat | 0 == myFloat && myFloat > 0 )
Але почекайте, є ще!
Ці побітові оператори працюють над 32-розрядними цілими числами зі знаком. Це означає, що найвищим бітом є знаковий біт. Примусивши знаковий біт до нуля, ваше число залишиться незмінним, лише якщо воно було позитивним . Ви можете використовувати це для перевірки позитиву та цілісності одним ударом:
if( (myInteger & 2147483647) == myInteger )
if( (myFloat & 2147483647) == myFloat )
* note bit AND operation is wrapped with parenthesis to make it work in chrome (console)
Якщо у вас виникають проблеми із запам’ятовуванням цього зв’язаного числа, ви також можете обчислити його заздалегідь як таке:
var specialNumber = ~(1 << 31);
Перевірка на наявність негативів
За коментарем @ Reinsbrain, подібний побітовий хак можна використовувати для перевірки від’ємного цілого числа. У негативному числі, ми дійсно хочемо , щоб лівий біт бути 1, тому, змушуючи цей біт в 1 , то число буде тільки залишатися незмінним , якщо воно було негативним , щоб почати з:
if( (myInteger | -2147483648) == myInteger )
if( (myFloat | -2147483648) == myFloat )
Це спеціальне число ще простіше розрахувати:
var specialNumber = 1 << 31;
Крайові футляри
Як вже згадувалося раніше, оскільки побітові оператори JavaScript перетворюють на 32-розрядні цілі числа, числа, які не вміщуються в 32 біти (більше ~ 2 млрд), зазнають невдачі
Ви можете повернутися до більш довгого рішення для таких:
if( parseInt(123456789000) == 123456789000 && 123456789000 > 0 )
Однак навіть це рішення в якийсь момент не вдається, оскільки parseIntйого точність обмежена для великої кількості. Спробуйте наступне і подивіться, що станеться:
parseInt(123123123123123123123);
На моєму комп’ютері в консолі Chrome це виводить: 123123123123123130000
Причиною цього є те, що parseInt обробляє вхідні дані як 64-розрядний плаваючий пристрій IEEE. Це забезпечує лише 52 біти для мантиси, тобто максимальне значення ~ 4,5e15 перед тим, як вона почне округлятися