# javascript – Testing whether a value is odd or even

I decided to create simple isEven and isOdd function with a very simple algorithm:

``````function isEven(n) {
n = Number(n);
return n === 0 || !!(n && !(n%2));
}

function isOdd(n) {
return isEven(Number(n) + 1);
}
``````

That is OK if n is with certain parameters, but fails for many scenarios. So I set out to create robust functions that deliver correct results for as many scenarios as I could, so that only integers within the limits of javascript numbers are tested, everything else returns false (including + and – infinity). Note that zero is even.

``````// Returns true if:
//
//    n is an integer that is evenly divisible by 2
//
// Zero (+/-0) is even
// Returns false if n is not an integer, not even or NaN
// Guard against empty string

(function (global) {

function basicTests(n) {

// Deal with empty string
if (n === '')
return false;

// Convert n to Number (may set to NaN)
n = Number(n);

// Deal with NaN
if (isNaN(n))
return false;

// Deal with infinity -
if (n === Number.NEGATIVE_INFINITY || n === Number.POSITIVE_INFINITY)
return false;

// Return n as a number
return n;
}

function isEven(n) {

// Do basic tests
if (basicTests(n) === false)
return false;

// Convert to Number and proceed
n = Number(n);

// Return true/false
return n === 0 || !!(n && !(n%2));
}
global.isEven = isEven;

// Returns true if n is an integer and (n+1) is even
// Returns false if n is not an integer or (n+1) is not even
// Empty string evaluates to zero so returns false (zero is even)
function isOdd(n) {

// Do basic tests
if (basicTests(n) === false)
return false;

// Return true/false
return n === 0 || !!(n && (n%2));
}
global.isOdd = isOdd;

}(this));
``````

Can anyone see any issues with the above? Is there a better (i.e. more accurate, faster or more concise without being obfuscated) version?

There are various posts relating to other languages, but I can’t seem to find a definitive version for ECMAScript.