Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
a[null] = 1; a[undefined] = 2;.
:foo == :foo # => true
'foo'.to_sym == :foo # => true
a = :foo
b = :foo
a == b # => true
__proto__ можно было бы обойтись и без символов, если бы изначально были добавлены Object.(get|set)PrototypeOf. Если бы символы появились в языке с самого начала, это бы избавило от костылей типа toString и прочих методов Object.prototype, ломающих словари. А теперь — поздно пить боржоми =\
var role = Symbol();
var user = {
id: 1001,
name: 'Administrator',
[role]: 'admin'
};
user.role;
// -> undefined
user.role = 'User';
user будет два свойства: Object { id: 1001, name: 'Administrator', role: 'User', Symbol(): 'admin' }
role), почему это подпадает под недо-ООП?role и _role. При некоторых условиях такое даже имеет смысл: в Python так обычно реализуют «ленивые» атрибуты классов, если их в проекте всего несколько.Object(), зачем нужен особый тип?Object() в качестве ключа, он будет приведён к строке [object Object].Map и WeakMap.$m = new Map();
$obj = new Object();
$m[$obj] = "woo";
Symbol.iterator. Множество другой логики ES6+ использует well-known символы — toStringTag, species и т. д.Object.getOwnPropertySymbols и Reflect.ownKeys. Свойство по ключу-символу наследуется точно так же, как и обычное свойство. Для приватных данных сейчас можно использовать WeakMap, хотя и они не являются полностью приватными (можно перехватить скрытые данные, обернув методы прототипа коллекции). Для хранения приватных данных, в ES7+ планируется добавить приватные поля — эта концепция, к сожалению, заменила более удачную, с моей точки зрения, концепцию абстрактных ссылок.Не хотел бы я жить в здании построенном на техническом черновике, а не утверждённом по всем протоколам чертежам.
Symbol прогнать через JSON.stringify? Он никак не отобразится при сериализации?Reflect. ES6 пример — копипаста моего из документации core-js, что позже скопировал в документацию babel. ES5 пример сломан, пишу issue — исправляют. Двигаюсь дальше, следующий пример — Proxy, тоже сломан. Пишу issue — автор проблемы не видит. Дальше читать уже боюсь.
Exploring JavaScript Symbols. Symbol — новый тип данных в JavaScript