Yes, I'd favor the `Symbol()` approach a lot. @Andrea: Alternatively desugaring `enum` values to `Number` is probably an approach that leads back to C/C++'s `#define` (which turns out to be a disastrous idea, at least software-engineering-wise), since this has horrendous impacts on comparison. Consider this:

```js

const PIXELS = enum {
        RED,
        GREEN,
        BLUE
};
const VEGGIES = enum {
        ONION,
        TOMATO
        
};
assert(PIXELS.RED === 0);
assert(VEGGIES.ONION === 0);
// Oops
assert(PIXELS.RED === VEGGIES.ONION);

```

Alternatively choosing `String()` would suffer from the same issue, but only clash when two `enum`s share common value identifiers; so `Symbol()` really is the only reasonable thing to desugar to.


On 16.12.2015 12:31, Coroutines wrote:
On Wed, Dec 16, 2015 at 3:20 AM, Thomas <thomasjamesfos...@bigpond.com> wrote:
IMHO it'd be a huge mistake to not use symbols for enums.

In my head this:

const colours = enum {
   Red,
   Yellow,
   Green,
   Blue
}

should 'desugar' to something like this in ES6:

const colours = {
   Red: Symbol('Red'),
   Yellow: Symbol('Yellow'),
   Green: Symbol('Green'),
   Blue: Symbol('Blue')
}

Thomas
This person gets it. +1  :-)
_______________________________________________
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

Reply via email to