var mySymbol =Symbol();var a = {};a.mySymbol ='Hello!';a[mySymbol] // undefineda['mySymbol'] // "Hello!"
属性名遍历
对象的Symbol属性只能通过Object.getOwnPropertySymbols方法获得。
var obj = {};var a =Symbol('a');var b =Symbol('b');obj[a] ='Hello';obj[b] ='World';var objectSymbols =Object.getOwnPropertySymbols(obj);objectSymbols// [Symbol(a), Symbol(b)]
一个新的API,Reflect.ownKeys方法可以返回所有类型的键名,包括常规键名和 Symbol 键名。
let obj = { enum:2, nonEnum:3};Reflect.ownKeys(obj)// ["enum", "nonEnum", Symbol(my_key)]
Symbol.for(),Symbol.keyFor()
Symbol.for()方法会搜索有没有这个参数作为名称的Symbol值,有就返回,没有就新建。
var s1 =Symbol.for('foo');var s2 =Symbol.for('foo');s1 === s2 // trues1//Symbol(foo)s2//Symbol(foo)
Symbol.keyFor方法返回一个已登记的 Symbol 类型值的key。
var s1 =Symbol.for("foo");Symbol.keyFor(s1) // "foo"