带你深入了解 symbol

引言

相信在学习 es5+的小伙伴都遇到过symbol,它也是新增的一种基本数据类型,symbol的作用还是挺大的,这篇文章就是带你深入的了解它。

symbol 诞生的意义

以前对象的属性会被强制转化为字符串,因此对象的key值只有一种数据类型为字符串,这样太过于单一,有时可能造成困扰,因此就有了symbol

symbol 的用法

symbol方法会返回一个唯一的symbol类型的值

console.log(Symbol()==Symbol())   // false

symbol可以被toString

console.log(Symbol().toString())  // "Symbol()"
console.log(Symbol().toString()==Symbol().toString()) //true

symbol作为对象的属性不会被toString

const a={a:1},b=Symbol(),c=Symbol(),d={b:2}
const obj={[a]:1,[b]:2,[c]:3,[d]:2}
console.log(obj) //{ "[object Object]": 2, Symbol(): 2, Symbol(): 3 }

symbol作为对象的属性时是不可遍历的

const a=Symbol("a")
const obj={[a]:1,b:2,c:3}
for(const k in obj){
    console.log(k)       // b,c
}
console.log(Object.keys(obj))       // [b,c]

// 如果要获取到对象中以symbol类型的key,需要使用到 Reflect 
console.log(Reflect.ownKeys(obj))  // [symbol("a"),b,c]

symbol 的其他用法

const a1=Symbol.for('a')    
const a2=Symbol.for("a")
const b=Symbol.for("b")

console.log(a1) // Symbol("a"),使用for方法创建symbol

//使用for方法创建的symol时,传递的参数一样,返回的symbol也是一样的
console.log(a1==a2) // true
console.log(a1==b) // false

// 使用 keyFor方法获取for方法创建symbol时传递的参数
console.log(Symbol.keyFor(a1),Symbol.keyFor(a2)) // a a

结尾

看完这篇文章后,相信你对symbol一定有了更深的了解。希望这篇文章能够给你带来帮助,最后感谢您的观看。如果有一些问题和疑惑,欢迎提出和分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值