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])
})

猜你喜欢

转载自www.cnblogs.com/ronle/p/11488939.html