ES6(八)Symbol
Symbol // 每个从Symbol()返回的symbol值都是唯一的。 // 一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的 let a1 = Symbol('a') let a2 = Symbol('a') // 根据给定的键 key,来从运行时的 symbol 注册表中找到对应的 symbol, // 如果找到了,则返回它,否则,新建一个与该键关联的 symbol,并放入全局 symbol 注册表中。 let a3 = Symbol.for('a') // a4查找到了a3的key,之前定义过,所以两者相等 let a4 = Symbol.for('a') // false console.log(a1 === a2) // true console.log(a3 === a4) let a = Symbol.for('name') let b = Symbol.for('game') let obj = { [a]: 'ronle', [b]: 'LOL', name: 'kaka' } // {name: "kaka", Symbol(name): "ronle", Symbol(game): "LOL"} console.log(obj) // 常规的for,Symbol的key是拿不到的 for (let [key, value] of Object.entries(obj)) { // name kaka console.log(key, value) } // 拿到Symbol的key和value,但普通对象的key和value拿不到 Object.getOwnPropertySymbols(obj).forEach((item) => { // 这样就可以循环遍历到值 // Symbol(name) "ronle" // Symbol(game) "LOL" console.log(item, obj[item]) }) // 拿到对象里所有的key和value Reflect.ownKeys(obj).forEach((item) => { console.log('ownKeys', item, obj[item]) })