基本数据类型Symbol

参考https://blog.csdn.net/darabiuz/article/details/121962153

Symbol的方法

Symbol()每次被调用都会生成一个新的Symbol,写法没有登记机制,所以每次调用都会返回一个不同的值

Symbol.for()不会每次调用就返回一个新的Symbol,而是会先检查给定的key是否已经存在,如果不存在,则会在全局创建并注册这个key,然后才会新建一个Symbol值

Symbol.keyFor()方法返回一个已经登记的Symbol类型值的key

// Symbol()
let s1 = Symbol('s')
let S2 = Symbol('s')
console.log(s1)//Symbol(s)
console.log(s2)//Symbol(s)
console.log(s1 === s2)//false

//Symbol.for()
let s1 = Symbol.for('s')
let s2 = Symbol.for('s')
console.log(s1)//Symbol(s)
console.log(s2)//Symbol(s)
console.log(s1 === s2)//true

//Symbol.keyFor()
let s1 = Symbol('s')
let s2 = Symbol.for('s')
Symbol.keyFor(s1)//undefined
Symbol.keyFor(s2)//s

作用

1、避免重复命名问题
2、消除魔术字符串(代码中多次出现,与代码形成强耦合的某一字符串或数值)
3、为对象定义一些非私有的、但又希望只用于内部的方法。

1、避免重复命名问题

定义Symbol类型的变量时,由于Symbol是唯一的所以可以避免重复命名

Symbol()的参数只是表示对于当前Symbol值得描述,因此相同参数的Symbol的返回值是不相等的

let s1 = Symbol('foo')
let S2 = Symbol('foo')
console.log(s1)//Symbol(foo)
console.log(s2)//Symbol(foo)
console.log(s1 === s2)//false

2、消除魔术字符串

个人理解

//平时
function test(val){
    if(val == 'tmd'){
       console.log("我是业务逻辑")
     }
}
test('tmd')//我是业务逻辑


//Symbol(错误示范)
function test(val){
    if(val == Symbol('tmd')){
       console.log("我是业务逻辑")
     }
}
test(Symbol('tmd'))//undefined 


//Symbol(正确示例,消除魔法字符串)
let temp = Symbol('tmd')
function test(val){
    if(val == temp){
       console.log("我是业务逻辑")
     }
}
test(temp)//我是业务逻辑

3、为对象定义一些非私有的、但又希望只用于内部的方法。

let name=Symbol('name');
let obj={
  [name]:'lnj',
    age:12,
    teacher:'wyx'
}
for(let key in obj){
    console.log(key)   //只能打印出age和teacher
}
//这个方法可以单独取出Symbol(name)
console.log(Object.getOwnPropertySymbols(obj))
posted @   九折丶水平  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示