0
点赞
收藏
分享

微信扫一扫

带你深入了解 symbol

腾讯优测 2022-04-14 阅读 93
javascript

引言

相信在学习 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 条评论