В свойствах ES6 можно определить как свойства символа:
var symbol = Symbol();
var object = {};
object[symbol] = 'value';
MDN определяет перечислимые свойства как "те, которые могут быть итерированы циклом for..in" (1). Свойства символа никогда не повторяются с помощью цикла for... in, поэтому их можно считать неперечислимыми (2).
Значит ли это, что вы можете это сделать:
Object.defineProperty(object, symbol, {
value: 'value',
enumerable: true
});
и что запрос объекта для этого дескриптора действительно подтверждает, что это свойство перечислимо:
Object.getOwnPropertyDescriptor(object, symbol)
// -> { enumerable: true }
Почему? Какая польза от этого?
(1) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties
(2) for... in использует [[Enumerate]]
, который включает только строковые ключи. Вероятно, теперь определение в MDN должно быть изменено, если у нас есть свойства символа.