On Fri, Jul 12, 2013 at 10:48 AM, Allen Wirfs-Brock <[email protected]> wrote: > On Jul 12, 2013, at 10:27 AM, Tab Atkins Jr. wrote: >> On Fri, Jul 12, 2013 at 10:19 AM, Mark S. Miller <[email protected]> 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: >> >> Number.isInteger(-0) == true >> Number.isInteger(NaN) == false >> Number.isInteger(Infinity) == false >> >> And, because of what we discussed in the recent thread... >> >> 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.
On the other hand, people (like me) who just want to be able to tell when something is a freaking integer will be better served by these semantics. ^_^ > If we went that direction what should Number.toInteger do for values outside > that range? The internal operation just returns 0 for things that aren't integers. I'd be okay with that, I suppose. (I use a similar function in some of my own code, and return false from the operation when the number cant' be converted, but that's because I use it as a combination tester and converter. We have an explicit tester, so I'm fine with the converter hiding details of its conversion.) ~TJ _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

