***

16994 ワード

==========================    =======================
       ES6Symbol(    )    
       //       
        const syb1 = Symbol();
        const syb2 = Symbol("abc");
        console.log(syb1, syb1) // Symbol()  Symbol(abc)
           ,              
    
                  ,  : __prop__ 
        :          ,      

         :
     1.        
     2.   typeof()     symbol
     3.      Symbol            ,        
      3-1.               ,          
          :
        const sy = Symbol("    ");
        const user = {
     
            a: 1,
            b: 2,
            [sy]: '    ,      ' 
        };

        3-2.             ,             :
          :    user[sy] //   

       3-3.           ,   for-in            ,Object.keys           
       const syb = Symbol();
        const obj = {
     
            [syb]: "",
            a: 1,
            b: 2
        }
        for (const key in object) {
     
            if (object.hasOwnProperty(key)) {
     
                const element = object[key];
                //      syb
            }
        }

        3-4. Object.getOwnPropertyNames                ,             

        3-5 es6    Object.getOwnPropertySymbols        

      4.         ,           ,                ,               ,
        String           , console.log()==========================    ============================
              (    )         ;const syb = Symbol();
        const obj1 = {
     
            a: 1,
            b: 2,
            [syb]: 3,
        }

        const obj2 = {
     
            [syb]: "c",
            a: 2
        }

        //                  ,            ,          

              :
        Symbol.for("   /    ") //       
        
      const syb1 = Symbol.for();
       const syb2 = Symbol.for();
       console.log(syb1 === syb2)//true            

       const syb1 = Symbol.for("abc");
       const syb2 = Symbol.for("abc");
       console.log(syb1 === syb2)//true            

      const syb = Symbol.for("abc");
       const obj = {
     
           a: 123,
           [ Symbol.for("abc")]: b,
       }
       //                
       console.log(obj.[Symbol.for("abc")]) // b      

       //          
         const SymbolFor = (() => {
     
                const global = {
     }; //            
                return function (name) {
     
                    if (!global[name]) {
     
                        global[name] = Symbol(name);
                    }
                    return global[name];
                }
            })()


           ==============  (  ,   )  =======================
                             ,   Symbol       
            ES6     ES5    :     ,       !
              , ES6                  

            1. Symbol.hasInstance                 ,     instance of    

              :
            obj instance of A
               
            A[Symbol.hasInstance](obj)  // function.prototype[Symbol.hasInstance]

                js     :

            Symbol.isConcatSpreadable = true      contact       

            Symbol.toPrimitive = function(type){
     }          

            Symbol.toStringTag = ""       Object.prototype.tostring