JS Symbol

博客介绍了JavaScript中Symbol的定义和使用。Symbol('a')定义的永远不重复,Symbol.for('a')可能重复且会全局保存。还提到避免被覆盖的方法,Symbol类似私有属性,普通遍历方式取不到其值,可通过特定方法遍历,也可用于隐藏对象属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Symbol("a")这种方式定义的Symbo永远不可能重复。

 Symbol.for("a")这种方式定义的Symbol可能会重复,如果参数名相同则Symbol也相同。

let person = Symbol("小明")    这种普通方式定义的symbol不可能相同
let edu = Symbol("本科")
console.log(person == edu)
person.age = 20
console.log(person.age)  //undefined
console.log(person.toString())
console.log(person.description)

let a = Symbol("cmshh")
let a2 = Symbol("cmshh")  //创建了两个cmshh  

let cms = Symbol.for("cmshh")
let cms2 = Symbol.for("cmshh")  //相当于只创建了一个cmshh  
let cms3 = Symbol("cmshh")
console.log(cms==cms2)  //true   Symbol.for("")定义的如果参数相同,则symbol也相同
console.log(Symbol.keyFor(cms))  //cmshh
console.log(Symbol.keyFor(cms3)) //undefined

Symbol.for()定义的会在全局中进行保存

 

 

使用加前缀方法避免被覆盖:

使用key:Symbol方式避免被覆盖:

class Cache{
    static data = {}
    static set(name,value){
        return (this.data[name] = value)
    }
    static get(name){
        return this.data[name]
    }
}

let user = {
    name:"apple",
    desc:"用户资料",
    key:Symbol('资料')
};

let cart = {
    name:"apple",
    desc:"购物车",
    key:Symbol("购物车")
}

Cache.set(user.key,user)
Cache.set(cart.key,cart)

console.log(Cache.get(user.key))
console.log(Cache.get(cart.key))

Symbol类似于私有属性,是受保护的,用普通的for in、for of 遍历方式取不到Symbol的值。for in、for of只能遍历普通属性。

可以使用Objec.getOwnPropertySymbols()来遍历Symbol属性,这种方式只能遍历Symbol属性。

let symbol = Symbol("hhh")
let hd = {
    name:"hello",
    [symbol]:"baidu.com"
};

for(let key of Object.getOwnPropertySymbols(hd)){
    console.log(key)
}

如果想遍历所有属性:

for(const key of Reflect.ownKeys(hd)){
    console.log(key)
}

js对象的属性如果不希望公布到外部的话,可以使用Symbol把它隐藏起来:

let site = Symbol("this is a symbol")
class User{
    constructor(name){
        this.name = name
        this[site] = "baidu"
    }

    getName(){
        return `${this[site]} ${this.name}`;
    }
}

let A = new User("A");
//console.log(A.getName()) 

for(const key in A){
    console.log(key)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值