Here's my take on a function that determines if a variable is an integer or not before or after it's been recast to an int. The functionality is very similar to Python's 'isdigit()' function which works like this:

>>> assert "1".isdigit()
>>> assert not "1.0".isdigit()

However, my Javascript function should return true when the input is an integer or a string of an integer. Here it goes:

function isInt(x) {
   var y = parseInt(x, 10);
   return !isNaN(y) && x == y && x.toString() == y.toString();
}
assert(isInt("1"));
assert(isInt(1));
assert(!isInt("1a"));
assert(!isInt("1.0"));

You can see it in action here.
To be honest, I'm writing about this here just to not forget it the next time I need a similar function. Sorry to cause any interweb-noise.

UPDATE

Corrected whitespacing and made a jsFiddle link.

Manuel SIMONOT - 26 May 2006 [«« Reply to this]
Thanx good idea i think. But are you sure the second part of the condition is useful?

Not sure:p
Peter Bengtsson - 31 May 2006 [«« Reply to this]
The second part is necessary so that "1.0" yields a false.
Anonymous - 01 June 2006 [«« Reply to this]
Indeed. My mistake:s
Anonymous - 04 May 2011 [«« Reply to this]
d
Kal - 17 April 2007 [«« Reply to this]
Am I allowed to use this function as long as I give you credit for it in my source code?
Okonomiyaki3000 - 11 December 2007 [«« Reply to this]
how about this:

String.prototype.isInt = function()
{
var re = new RegExp("^[\d]+$");
return this.match(re);
}
marchaos - 20 January 2008 [«« Reply to this]
that will fail for negative numbers.
Anonymous - 18 January 2008 [«« Reply to this]
assert -> alert
ankit - 09 January 2009 [«« Reply to this]
Thanks the original function worked for me.
scott christopher - 04 February 2009 [«« Reply to this]
I tend to use:

function isInt (i) {
return (i % 1) == 0;
}
Peter Bengtsson - 27 April 2010 [«« Reply to this]
This fails on floating point numbers. isInt("1.1") is false but isInt("1.0") is true which it's not supposed to.
Stuart Thiel - 17 September 2011 [«« Reply to this]
Thanks, used and credited.
onli - 10 February 2009 [«« Reply to this]
Thank you.
halbesbit - 27 April 2010 [«« Reply to this]
sorry i post the false code :/, delete it please.
isInt=function (i) { return ((i % 1) == 0)? i:false; }
Peter Bengtsson - 27 April 2010 [«« Reply to this]
Thanks. That's what scott suggested above. His approach returns only true or false.
msangel - 18 September 2010 [«« Reply to this]
function isInteger(s){
return (s%(parseInt(s)/Number(s)))===0;
}

is perfect solution (=
gonzoyumo - 28 January 2011 [«« Reply to this]
except when you want to consider "0" is an integer (which does)
Tex - 25 February 2011 [«« Reply to this]
Manuel SIMONOT feeling was right, there is useless parts. But he picked the really wrong one...

function isInt(n) {
return n.toString()==parseInt(n).toString();
}
// 'a' != 'NaN' so 'a' is not an Int
// '1.0' != '1' so '1.0' is not an Int

Peter want "1.0" to be false. So n%1==0 is the wrong test for that. But this request is, in a way, absurd. "1.0" is findable as being a Float. 1.0 can't. It is parsed from Float to Int before being send to the function. Displaying a 1.0 can only be done from a string. alert(1.0); give 1. And the test wrote in the article doesn't test Integer or Float, only String.
Aadit M Shah - 24 July 2011 [«« Reply to this]
The simplest form of isInt is as follows (for a number n):

parseInt(n) === n; //isInt

That's it - you don't need a function call! Similarly, we have the following:

parseInt(n) !== n; //isNotInt
parseFloat(n) === n; //isFloat
parseFloat(n) !== n; //isNotFloat
Anonymous - 03 November 2011 [«« Reply to this]
And how would you check this "03" ?
Bobinours - 13 June 2012 [«« Reply to this]
It depend of the version of EcmaScript and the browser.

"If the input string begins with "0", radix is eight (octal). This feature is non-standard, and some implementations deliberately do not support it (instead using the radix 10)."

"The ECMAScript 5 specification of the function parseInt no longer allows implementations to treat Strings beginning with a 0 character as octal values."

(Source : https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt )

So... For this reason, you should always specify a radix when using parseInt().

parseInt("03", 10);
Anonymous - 15 October 2012 [«« Reply to this]
Why this:

var n = 3.0;
alert(parseInt(n)===n);

alerts "true"?
Peter Bengtsson - 15 October 2012 [«« Reply to this]
Python does the same:

>>> 3.0 == 3
True

But in python you can do:

>>> 3 is 3
True
>>> 3.0 is 3.0
True
>>> 3.0 is 3
False


Your email will never ever be published