Allen Wirfs-Brock (2013-07-12T17:48:41.000Z)
domenic at domenicdenicola.com (2013-07-16T00:30:39.517Z)
On Jul 12, 2013, at 10:27 AM, Tab Atkins Jr. wrote: > On Fri, Jul 12, 2013 at 10:19 AM, Mark S. Miller <erights at google.com> wrote: > >> No. Even if `toInteger` meant "no fractional component", I would still expect >> it only to return `true` if there is some specific mathematical integer that >> the JS number can be said to exactly represent. For the same reason, I think >> `isInteger(-0)` should be `true` and `isInteger(NaN)` should be `false`. > > Agreed. `isInteger()` has one job, and it's kinda worthless if it can't > even do that. How it should be: > > ```js > Number.isInteger(-0) == true > Number.isInteger(NaN) == false > Number.isInteger(Infinity) == false > ```js > > And, because of what we discussed in the recent thread... > > ```js > Number.isInteger(Math.pow(2,53)-1) == true > Number.isInteger(Math.pow(2,53)) == false > ``` In other words you want to define `Number.isInteger` to return `true` only if it's argument is an integer number in the range -(2^53-1)..2^53-1 That's a useful test and a plausible definition of `Number.isInteger` but it will also probably be surprising to programmers who are familiar with the esoterics of IEEE floats. If we went that direction what should `Number.toInteger` do for values outside that range?