Symbol

Symbol

  1. 每个Symbol都是独一无二的
    • Symbol() !== Symbol()
  2. Symbol 不能进行运算
  3. Symbol可以转化成String
    • Symbol('Desc').toString() === 'Symbol(Desc)'
  4. Symbol 可以转化成Boolean,始终是true
    • !!Symbol() === true
  5. Symbol.for() 全局登记Symbol值
        Symbol(desc) // 生成独一无二的Symbo�l值
        Symbol.for(desc)//相同的desc只会生成一个Symbol值,多次调用指向同一个值
    
  6. Symbol.keyFor(Symbol) 返回已登记的Symbol的key,Symbol.for()生成的Symbol才会有登记记录,
        Symbol.keyFor(Symbol.for('key')) // 'key'
        Symbol.keyFor(Symbol()) // undefined
    
  7. 内置Symbol
    • Symbol.hasInstance
        foo instanceOf Foo
        // 实际调用
        Foo[Symbol.hasInstance](foo)
    
    • Symbol.isConcatSpreadable,在进行concat操作时,遇到数组或者类数组对象是否展开,true/展开,false/不展开,数组默认展开,类数组对象默认不展开
    • Symbol.species 创建衍生对象时,使用的构造函数
        class MyArray extends Array {}
    
        const a = new MyArray(1, 2, 3);
        const b = a.map(x => x);
    
        b instanceof MyArray // true
        b instanceof Array // true
    
        class MyArray2 extends Array {
            static get [Symbol.species]() { return Array; }
        }
    
        const a2 = new MyArray2();
        const b2 = a2.map(x => x);// b2是创建的衍生对象
    
        b2 instanceof MyArray // false
        b2 instanceof Array // true
    
    • Symbol.match,Symbol.replace,Symbol.search,Symbol.split,正则表达式对象部署这几个属性,在进行对应操作时调用相应属性指向的方法
    • Symbol.iterator 指向遍历器,部署这个属性的对象都可遍历
    • Symbol.toPrimitive 对象转成数字或者字符串时调用
        let obj = {
            [Symbol.toPrimitive](hint) {
                switch (hint) {
                case 'number':
                    return 123;
                case 'string':
                    return 'str';
                case 'default':
                    return 'default';
                default:
                    throw new Error();
                }
            }
        };
    
        2 * obj // 246
        3 + obj // '3default'
        obj == 'default' // true
        String(obj) // 'str'
    
    • Symbol.toStringTag 对象调用toString时定制返回名称[Object xxx]
    • Symbol.unscopables 使用with命令时,排除的对象属性
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加...
    oWSQo阅读 3,544评论 1 3
  • 1.概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象...
    赵然228阅读 4,210评论 2 10
  • let and constDestructuring 解构赋值Spread and Reset Spre...
    小宝薯阅读 5,373评论 0 13
  • 1. 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突,如果有一种机制,保证每个属性的名字都是独一无二的...
    __越过山丘__阅读 3,352评论 0 0
  • 宝虹中粗300g 温莎牛顿尼龙笔 歌文 网上找个眼睛图,线稿打个大致的形就好,不需要太复杂,用可塑橡皮减淡 先从眼...
    juliaZB阅读 6,426评论 13 20

友情链接更多精彩内容