美文网首页
Symbol-独一无二的值

Symbol-独一无二的值

作者: skoll | 来源:发表于2022-06-23 15:48 被阅读0次

    简介

    1 .作为一个对象或一个Map的键值,他可以保证你的对象或Map的键值不重复
    2 .即使传入相同的值,他生成的字符串也是不唯一的
    3 .Symbol类型唯一合理的用法是用变量存储 symbol的值,然后使用存储的值创建对象属性
    4 .如果我们想要向“属于”另一个脚本或者库的对象添加一个属性,我们可以创建一个 symbol 并使用它作为属性的键。symbol 属性不会出现在 for..in 中,因此它不会意外地被与其他属性一起处理。并且,它不会被直接访问,因为另一个脚本没有我们的 symbol。因此,该属性将受到保护,防止被意外使用或重写

    返回symbol

    1 .Object.getOwnPropertySymbols(obj)
    2 .Reflect.ownKeys(obj)

    可能会操作到symbol的

    1 .

    使用场景1 消除魔术字符串

    1 .代码中出现多次,与代码形成强耦合关系的某一个具体的字符串或者数值,风格良好的代码,应该尽量消除魔术字符串,由清晰的变量代替

    const tabTypes = {
        basic: Symbol(),
        super: Symbol(),
    }
    
    if (type === tabTypes.basic) {
        return <div>basic tab</div>
    }
    
    if (type === tabTypes.super) {
        return <div>super tab</div>
    }
    

    2 .我不关心他真正的值是什么,反正不和其他的相等就可以

    使用场景2 避免覆盖之前的属性,给对象添加新属性的时候

    const name = Symbol('name');
    const obj = {
        [name]: 'ClickPaas',
    }
    

    使用场景3 模拟私有方法

    1 .代码的任何其他部分都不能意外访问或重写这些属性

    const speak = Symbol();
    class Person {
        [speak]() {
            ...
        }
    }
    //因为外面根本就造出来一个speak的symbol类型,所以一定是安全的
    

    使用场景3 类的单例模式

    1 .保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    2 .解决:一个全局使用的类频繁地创建与销毁
    3 .使用场景:当您想控制实例数目,节省系统资源的时候

    相关文章

      网友评论

          本文标题:Symbol-独一无二的值

          本文链接:https://www.haomeiwen.com/subject/eauqvrtx.html