Oliver Hunt (2013-07-12T17:16:14.000Z)
On Jul 12, 2013, at 8:58 AM, Luke Hoban <lukeh at microsoft.com> wrote:

>> From: Allen Wirfs-Brock [mailto:allen at wirfs-brock.com] 
>> 
>> On Jul 11, 2013, at 9:01 PM, Luke Hoban wrote:
>> 
>>> Two questions on new Number APIs:
>>> 
>>> 1) Is it intentional that clz is on Number.prototype instead of Number?  Why?
>> 
>> I think there is a stronger case to me made for Math.clz(number).  Number.prototype and Math both seem like plausible homes for clz.  In the end, I placed it on Number prototype because it is an operation that is specific to a particular numeric encoding rather than an implementation of a general mathematical function. 
>> 
> 
> Yeah, I think Math would have been less surprising.  I don't feel strongly, but Number.prototype wasn't what I had expected.

I agree with luke, Math.clz seems like a better place than the prototype, otoh there's a nice conciseness to foo.clz() …


> 
>>> 
>>> 2) Is it intentional that Number.toInteger(Infinity) returns true?
>> Huh? How's that?
>> 
>> Number.toInteger is specified as the single step:
>> 
>>   1 Return ToInteger(number)
>> 
>> and step 4 of the abstract operation ToInteger(number):
>> 
>> 4 If number is +0, -0, +∞, or -∞, return number.
>> 
> 
> Sorry, I meant 'isInteger'.  Per your quoted section, toInteger(Infinity) is Infinity, so isInteger(Infinity) is true.

I agree with MarkM that it seems bizarre that non-finite numbers may return true, but i think this is rooted in .isInteger() sounding like it means a 32bit integer (such that bitops won't modify the value) when it is actually a "no fractional component" test.

--Oliver

> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
domenic at domenicdenicola.com (2013-07-15T22:43:55.501Z)
On Jul 12, 2013, at 8:58 AM, Luke Hoban <lukeh at microsoft.com> wrote:

> Yeah, I think `Math` would have been less surprising.  I don't feel strongly, but `Number.prototype` wasn't what I had expected.

I agree with luke, `Math.clz` seems like a better place than the prototype, otoh there's a nice conciseness to `foo.clz()` …

> Sorry, I meant `isInteger`.  Per your quoted section, `toInteger(Infinity)` is `Infinity`, so `isInteger(Infinity)` is `true`.

I agree with MarkM that it seems bizarre that non-finite numbers may return true, but i think this is rooted in `.isInteger()` sounding like it means a 32bit integer (such that bitops won't modify the value) when it is actually a "no fractional component" test.