Symbol in js

// 对象的属性键只能是string类型和symbol类型
// “Symbol”值代表用给定名称作为唯一标识
// 存在系统级symbol
// 用于区别对待对内操作和对外选择性输出
// let id = Symbol('id')
// let ids = Symbol('id')
// console.log(id)
// console.log(ids)
// console.log(id == ids)

let testObj = {
  name: 'test'
}
//
let testId = Symbol('id')
testObj[testId] = 'test_id'
console.log(testObj[testId])


let user = { name: "John" };
let id = Symbol("id");
user[id] = "ID Value";
console.log(user[id]);


let age = Symbol('age')
let symbolObj = {
  gender: 'girl',
  [age]: 12, // 这是symbol对象键
  years: 14 // 这是普通的字符串键
}

let allKeys = Reflect.ownKeys(symbolObj) // 返回对象的全部键(包括字符串键名和symbol键名),以数组形式返回
console.log('全部键')
console.log(allKeys)
console.log(symbolObj)

let allSymbols = Object.getOwnPropertySymbols(symbolObj) // 返回对象中所有symbol键名,以数组形式
console.log('全部symbol键')
console.log(allSymbols)

// 用for in遍历不到symbol键
// JSON.stringify()时候也将symbol排除在外
for (let i in symbolObj) {
  console.log(i)
}


// 通过全局Symbol注册能实现两个名字相同的symbol是同样的 Symbol.for(name)
let name1 = Symbol.for('name') // name1是全局symbol
let name2 = Symbol.for('name')
console.log(name1 == name2) // true


let keyName = Symbol.keyFor(name2)
console.log(keyName) // 通过symbol对象名字找symbol键名,找不到返回undefined,只对全局symbol好使
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值