引言
相信在学习 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
一定有了更深的了解。希望这篇文章能够给你带来帮助,最后感谢您的观看。如果有一些问题和疑惑,欢迎提出和分享。