Symbol

作者: 陶六六 | 来源:发表于2018-08-22 22:34 被阅读0次

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命令时,排除的对象属性

相关文章

  • Symbol

    Symbol 每个Symbol都是独一无二的Symbol() !== Symbol() Symbol 不能进行运算...

  • Symbol

    1、window.Symbol 2、不允许new Symbol 3、symbol() !== symbol() 4...

  • Symbol学习笔记

    一.Symbol是什么 typeof Symbol() === 'symbol',symbol是js中第7种基本类...

  • ES6补充以及Node事件轮询

    Symbol es6中新增了symbol类型,symbol类型的值是通过symbol函数生成的,相同symbol函...

  • 深入理解ES6六

    Symbol ES6新增的数据类型Symbol 创建Symbol:通过去全局的Symbol函数创建一个Symbol...

  • JS-学习ES6之-Symbol数据类型[整理稿]

    为什么要有Symbol Symbol可以传参数 Symbol 作为属性名的用法 Symbol.for() 1. 为...

  • Symbol简单理解

    Symbol 概述 作为属性名的symbol 属性名的遍历 Symbol的方法 内置的symbol值 概述 Sym...

  • ES6-新增数据类型

    symbol类型 全局函数window.Symbol() typeof window.Symbol() 返回的类型...

  • ES6-Symbol

    创建Symbol实例let s1 = Symbol()let s2 = Symbol('another symbo...

  • umdh--查找内存泄漏--使用方法

    set _NT_SYMBOL_PATH=symbol目录多个目录,以’;’隔开 例:Set _NT_SYMBOL_...

网友评论

      本文标题:Symbol

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