首页 > 其他 > 详细

ES6(八)Symbol

时间:2019-09-09 00:50:24      阅读:86      评论:0      收藏:0      [点我收藏+]
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])
})

 

ES6(八)Symbol

原文:https://www.cnblogs.com/ronle/p/11488939.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!