Re: Why Number(symbol) crashes?

2016-10-15 Thread medikoo
Allen, thanks for comprehensive answer, it's clear now.

Still, I must agree with Michał, that introducing such inconsistency to
language doesn't give good impression. It's like we try to build other
language on top of language which we can't change.

It's now even more difficult to explain language behaviors to newcomers.



--
View this message in context: 
http://mozilla.6506.n7.nabble.com/Why-Number-symbol-crashes-tp359554p359653.html
Sent from the Mozilla - ECMAScript 4 discussion mailing list archive at 
Nabble.com.
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Why Number(symbol) crashes?

2016-10-15 Thread Michał Wadas
To be honest, introducing new throw-on-invalid value behaviour to existing
function that didn't throw before looks rather like a bad design for me.
Personally I wouldn't abandon accept-anything behaviour of Number, but
rather add method Number.from that will throw on all values that shouldn't
be coerced to number.

On 15 Oct 2016 1:23 a.m., "Allen Wirfs-Brock"  wrote:

>
> > On Oct 14, 2016, at 11:02 AM, Claude Pache 
> wrote:
> >
> >
> >> Le 11 oct. 2016 à 11:07, medikoo  a
> écrit :
> >>
> >> I was searching the archived but wasn't able to find the answer.
> >>
> >> What's the reasoning behind having Number(symbol) crash instead of
> returning
> >> NaN (as it's in case all other non-coercible values?). It feels not
> >> consistent.
> >>
> >> If someone can point me to some discussion that provided the reasoning
> I'd
> >> be grateful
> >>
> >
> > I believe that the reason of the inconsistency is more an accident of
> history in the development of ES6 than a well-reasoned design decision.
> Here is my understanding:
>
> No this was an intentional design decision. There is no  obvious or
> natural Number value corresponding to symbol values. Rather than inventing
> some arbitrary conversion rule (for example producing NaN) TC39 choose to
> throw an exception for such conversions as they are a clear manifestation
> of some sort of program bug.
>
> Note that the coercion rules for the original JS primitive types were
> created at a time when JavaScript did not have an exception handling
> mechanism and hence all operations were required to produce some value.
> Throwing exceptions for unreasonable Symbol coercions is intentionally
> inconsistent with the handling of the original primitive coercions and is
> intended to set a new precedent  that will be applied to any other new
> primitive types that might be added to ES in the future.
>
> Allen
> ___
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Why Number(symbol) crashes?

2016-10-14 Thread Allen Wirfs-Brock

> On Oct 14, 2016, at 11:02 AM, Claude Pache  wrote:
> 
> 
>> Le 11 oct. 2016 à 11:07, medikoo  a écrit :
>> 
>> I was searching the archived but wasn't able to find the answer.
>> 
>> What's the reasoning behind having Number(symbol) crash instead of returning
>> NaN (as it's in case all other non-coercible values?). It feels not
>> consistent.
>> 
>> If someone can point me to some discussion that provided the reasoning I'd
>> be grateful
>> 
> 
> I believe that the reason of the inconsistency is more an accident of history 
> in the development of ES6 than a well-reasoned design decision. Here is my 
> understanding:

No this was an intentional design decision. There is no  obvious or natural 
Number value corresponding to symbol values. Rather than inventing some 
arbitrary conversion rule (for example producing NaN) TC39 choose to throw an 
exception for such conversions as they are a clear manifestation of some sort 
of program bug.

Note that the coercion rules for the original JS primitive types were created 
at a time when JavaScript did not have an exception handling mechanism and 
hence all operations were required to produce some value. Throwing exceptions 
for unreasonable Symbol coercions is intentionally inconsistent with the 
handling of the original primitive coercions and is intended to set a new 
precedent  that will be applied to any other new primitive types that might be 
added to ES in the future.

Allen
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Why Number(symbol) crashes?

2016-10-14 Thread Claude Pache

> Le 11 oct. 2016 à 11:07, medikoo  a écrit :
> 
> I was searching the archived but wasn't able to find the answer.
> 
> What's the reasoning behind having Number(symbol) crash instead of returning
> NaN (as it's in case all other non-coercible values?). It feels not
> consistent.
> 
> If someone can point me to some discussion that provided the reasoning I'd
> be grateful
> 

I believe that the reason of the inconsistency is more an accident of history 
in the development of ES6 than a well-reasoned design decision. Here is my 
understanding:

* At one point of time in the development of ES6, /implicit/ conversion from 
symbol to string or number was made forbidden. This is a behaviour that was 
discussed and decided, in order to prevent silent bugs in computed properties 
in situations where a string was previously implicitely expected.

```js
var key = Symbol()
foo[‘key + ‘-suffix’] // TypeError: can’t convert symbol to string
foo[‘key + ‘42] // TypeError: can’t convert symbol to number
```

* However, /explicit/ conversion from symbol to string (using `String(…)` or 
`.toString()`) has been kept as allowed. This is a more debatable decision 
(with pros and cons). On the other hand, I don’t recall any discussion about 
making explicit conversion from symbol to number different from the implicit 
one, nor anyone complaining that it remained the only primitive type to which 
symbol could not be *explicitly* coerced.

—Claude


___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Why Number(symbol) crashes?

2016-10-11 Thread Jordan Harband
whoops, sorry, I missed the earlier thread. disregard.

On Tue, Oct 11, 2016 at 5:53 PM, Jordan Harband  wrote:

> I'm not sure what you're asking. `Number(Symbol())` throws a TypeError.
>
> Perhaps are you using a Symbol sham (that only partially is able to
> polyfill Symbols)?
>
> In what browser/engine are you seeing `NaN`?
>
> On Tue, Oct 11, 2016 at 11:37 AM, Raul-Sebastian Mihăilă <
> raul.miha...@gmail.com> wrote:
>
>> How is NaN useful? Isn't it better to be explicit if you really want a
>> string?
>>
>> ___
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Why Number(symbol) crashes?

2016-10-11 Thread Jordan Harband
I'm not sure what you're asking. `Number(Symbol())` throws a TypeError.

Perhaps are you using a Symbol sham (that only partially is able to
polyfill Symbols)?

In what browser/engine are you seeing `NaN`?

On Tue, Oct 11, 2016 at 11:37 AM, Raul-Sebastian Mihăilă <
raul.miha...@gmail.com> wrote:

> How is NaN useful? Isn't it better to be explicit if you really want a
> string?
>
> ___
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Why Number(symbol) crashes?

2016-10-11 Thread Raul-Sebastian Mihăilă
How is NaN useful? Isn't it better to be explicit if you really want a
string?
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Why Number(symbol) crashes?

2016-10-11 Thread Oriol Bugzilla
In my opinion it's a bit incoherent that each object-coercible type behaves 
differently when coercing symbols to it.

Symbols can be explicitly coerced to strings, but not implicitly:

```js
String(Symbol("abc")); // "Symbol(abc)"
Symbol("abc") + ""; // TypeError
```

Symbols can't be coerced to numbers, neither explicitly nor implicitly:

```js
Number(Symbol("abc")); // TypeError
+Symbol("abc"); // TypeError
```

Symbols can be coerced to booleans, both explicitly and implicitly:

```js
Boolean(Symbol("abc")); // true
!!Symbol("abc"); // true
```

Maybe the `Number` constructor could behave analogous to `String` and return 
`NaN` for symbols, instead of calling ToNumber.


___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Why Number(symbol) crashes?

2016-10-11 Thread Kris Siegel
Symbol is such an oddball; similar to this if you do Symbol() + "" it will
also throw an exception unlike all other built-ins. Granted I have no idea
what a string representation of Symbol *really* would be but no other built
in type behaves the way Symbol does.

I do think Number(Symbol()) should return NaN though. I'd like to know why
this didn't happen.



On Tue, Oct 11, 2016 at 2:07 AM, medikoo <medikoo+mozilla@medikoo.com>
wrote:

> I was searching the archived but wasn't able to find the answer.
>
> What's the reasoning behind having Number(symbol) crash instead of
> returning
> NaN (as it's in case all other non-coercible values?). It feels not
> consistent.
>
> If someone can point me to some discussion that provided the reasoning I'd
> be grateful
>
>
>
> --
> View this message in context: http://mozilla.6506.n7.nabble.
> com/Why-Number-symbol-crashes-tp359554.html
> Sent from the Mozilla - ECMAScript 4 discussion mailing list archive at
> Nabble.com.
> ___
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Why Number(symbol) crashes?

2016-10-11 Thread medikoo
I was searching the archived but wasn't able to find the answer.

What's the reasoning behind having Number(symbol) crash instead of returning
NaN (as it's in case all other non-coercible values?). It feels not
consistent.

If someone can point me to some discussion that provided the reasoning I'd
be grateful



--
View this message in context: 
http://mozilla.6506.n7.nabble.com/Why-Number-symbol-crashes-tp359554.html
Sent from the Mozilla - ECMAScript 4 discussion mailing list archive at 
Nabble.com.
___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss