Skip to content

Commit

Permalink
Merge branch 'master' of http://github.com/attaboy/wtfjs
Browse files Browse the repository at this point in the history
  • Loading branch information
brianleroux committed Jul 15, 2010
2 parents d202285 + 2d38f5a commit 83ffeb8
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions posts/2010-06-16-typeof-number-is-not-number.md
@@ -0,0 +1,34 @@
How do you determine if a number is an integer in JavaScript?

x = 1;

x === Math.floor(x);
// returns true

But what happens if we try to add a method for this to the Number prototype?

Number.prototype.isInteger = function() {
return this === Math.floor(this);
}

x = 1;

x.isInteger();
// returns false!

Why? It turns out that when you add methods to Number, the type of the number inside the method becomes "object" rather than "number", but Math.floor returns a result of type "number". If you use the === operator, the two values are no longer equal because they're different types. So the method can be fixed two ways.

Solution 1 is to avoid comparing types:

Number.prototype.isInteger = function() {
return this == Math.floor(this);
// works but breaks if you care about 0 vs other falsy values
}

Solution 2 is better; cast "this" to the Number type and then the types are equal.

Number.prototype.isInteger = function() {
return Number(this) === Math.floor(this);
}

--- [@attaboy](http://twitter.com/attaboy)

0 comments on commit 83ffeb8

Please sign in to comment.