JavaScript is_nan
Returns whether argument is not a number
1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 2526 27 28 29 30 | function is_nan (val) { // Returns whether argument is not a number // // version: 1008.1718 // discuss at: http://phpjs.org/functions/is_nan // + original by: Onno Marsman // + input by: Robin // * example 1: is_nan(NaN); // * returns 1: true // * example 2: is_nan(0); // * returns 2: false var warningType = ''; if (typeof val=='number' && isNaN(val)) { return true; } //Some errors for maximum PHP compatibility if (typeof val=='object') { warningType = (val instanceof Array ? 'array' : 'object'); } else if (typeof val=='string' && !val.match(/^[\+\-]?\d/)) { //simulate PHP's behaviour: '-9a' doesn't give a warning, but 'a9' does. warningType = 'string'; } if (warningType) { throw new Error('Warning: is_nan() expects parameter 1 to be double, '+warningType+' given'); } return false; } |
Examples
» Example 1
Running
1 | is_nan(NaN); |
Should return
1 | true |
» Example 2
Running
1 | is_nan(0); |
Should return
1 | false |
Dependencies
No dependencies, you can use this function standalone.
Open syntax issues
php.js uses JsLint to help us keep our code consistent and prevent some common bugs.
Eventually we want all code to pass or at least take into consideration most fixes suggested by JsLint, following this JsLint configuration we’ve decided on.
Authors
Thanks to the following developers, you get to have is_nan goodness in JavaScript.
Never really thought of using a regular expression to test whether a string would result in an error and you're right: that would probably be a lot better. Feel free to post your suggestion, otherwise I'll have a look at it myself tomorrow.
Furthermore: is_nan in PHP behaves very differently from isNaN in javascript. Javascripts isNaN is more like the opposite of PHPs is_numeric function (Just have a look at the implementation of is_numeric in this library). So a simple wrapper to isNaN won't suffice and the extra check for the number type is needed.
The rest of the code in this function is just to generate errors in the same way PHP does. And the suggested regular expression will, of course, make this code a lot shorter.
Note that is_finite and is_infinite both contain the exact same error code. I will fix this too.


Robin
28 Oct '08