ES6中的Symbol(独一无二的Symbol,当然有一些小细节)

symbol是独一无二的

symbol的意思是独一无二的,哪怕内容一样。他们也是不同的

let a = Symbol('0')
let b = Symbol('0')
console.log(a == b)

symbol的描述

根据symbol描述的形式,分为局部的描述和全局的描述

局部的描述

let a = Symbol('0')
let b = Symbol('1')

console.log(a)
console.log(b)
//里面的值就是描述,让我们获取这两个描述
console.log(a.description)
console.log(b.description)

全局的描述

let a = Symbol.for('0')
let b = Symbol.for('0')
console.log(a === b)//这个时候就是相等的了,因为会从全局里面去找


//获取全局的描述,注意这里传递的是变量!!!
console.log(Symbol.keyFor(a))
//当然以前的这个也可以使用
console.log(a.description)

symbol的描述是对象时候

当描述是对象的时候,有点小小的说明

let obj = {
  name: '小明',
  age: '18'
}
let a = Symbol(obj)
console.log(a.description)//[object Object]

//上面在调用description的时候,其实是调用对象的toString()方法
//改写toString()方法
let obj = {
  name: '小明',
  age: '18',
  toString(){
    console.log(this)
  }
}
let a = Symbol(obj)
console.log(a.description)//[object Object]

symbol的遍历

当一个数据结构中含有symbol时候,使用以下是无法遍历出的

for in
for of 

正确的遍历方式

//for of + reflect

class User{
  constructor(name,age){
    this.name = name
    this[Symbol('age')] = age
  }
}
const user = new User('小明',18)
for ( let key of Reflect.ownKeys(user) ){
    console.log(key)
}

symbol的使用场景

当对象中键为相同,但是其值不同。消除冲突

let obj ={
  [Symbol('李四')]:{age:18},
  [Symbol('李四')]:{age:19}
}
console.log(obj)

symbol的总结

如果是遇到独一无二的时候,就使用这种结构

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值