Я знаю, что эта нить немного старый, но я считаю, что я нашел наиболее точное решение до сих пор:
function isNat(n) { // A natural number is...
return n != null // ...a defined value,
&& n >= 0 // ...nonnegative,
&& n != Infinity // ...finite,
&& typeof n !== 'boolean' // ...not a boolean,
&& !(n instanceof Array) // ...not an array,
&& !(n instanceof Date) // ...not a date,
&& Math.floor(n) === +n; // ...and whole.
}
Мое решение в основном эволюция вклада @BenjaminGruenbaum.
Чтобы создать резервную копию мое требование точности я значительно расширил на тесты, которые @rlemon сделаны и положить все предложенные решения, включая мое собственное через них:
http://jsfiddle.net/icylace/qY3FS/1/
Как и ожидалось, некоторые решения являются более точными чем другие, но моя единственная, которая проходит все тесты.
EDIT: Я обновил isNat()
, чтобы меньше полагаться на утиную печать и, следовательно, быть еще более надежным.
http://stackoverflow.com/questions/3645544/checking-if-a-variable-is-an-integer-in-javascript –
Не являются ли естественные числа просто неотрицательные целые числа? [Попробуйте 'parseInt'] (http://stackoverflow.com/questions/1133770/how-do-i-convert-a-string-into-an-integer-in-javascript)? [parseInt в Mozilla Developer Network] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt) – kush
@kush: parseInt? Это проверяет? –