• Symbol


    Symbol是js第七种数据类型。在es5时,对象的属性都是字符串。并且在多人开发时属性名很容易发生重叠,导致后写会覆盖掉前面的。为了解决这种问题从es6引入了Symbol.

    Symbol它并没有一个具体的值,但是它是独一无二的。它跟 react中createRef()的意义很像。this.user=createRef() this.pass=createRef()  它可以写很多个ref,但是每个都不一样。

    首先生成一个Symbol,它不需要 new

    let cat =Symbol('name')//他的参数是个字符串,代表对Symbol的描述
        //第一种写法
        let a={}
        a[cat]='yingduan'
        //第二种写法
        let a={
            [cat]:'yingduan'
        }
        //第三种写法
        let a={}
        Object.defineProperty(a,cat,{value:'yingduan'})
        //上面三种写法是一个效果
        a[cat]//'yingduan'
    
        //如果你的属性是Symbol的话,必须要用[]来获取,不能用.它的运算符。。//a[Symbol]
    
        //属性名的遍历.  Object.getOwnPropertySymbol()方法
        Object.getOwnPropertySymbol(a)//拿到属性是Symbol,然后放在数组里
    
        //Symbol.for()
        let b=Symbol.for('foo')
        let c=Symbol.for('foo')
        b===c //true //通过Symbol.for 声明的Symbol会提交到全局,并且他们是相同
        //但是 通过 Symbol()声明的他们就不是相等的
        let b=Symbol('foo')
        let c=Symbol('foo')
        b===c //false
    
        //
        Symbol.keyFor(b)//这时它会返回一个已登记的Symbol创建它时描述性的字符串
    
        //Interator(遍历器),为不同的数据结构提供统一的访问机制,任何数据只要部署了interator接口,就可以进行遍历操作
        //一个数据结构只要有Symbol.iterator属性就认为是可以用 for...of遍历的
        // 对象本身是没有Symbol.iterator属性的,所以我么可以给他手动加一个,然后遍历
        let obj ={
            [Symbol.iterator]:function(){
                return {
                    next:function (){
                        return {
                            value:1,
                            done:true
                        }
                    }
                }
            }
        }
        //数组是不用做任何处理就能使用 for...of遍历的,因为原生它就有Symbol.iterator这个属性
        
        //对于类数组的遍历:
        let arr ={
            0:'a',
            1:'b',
            2:'c',
            length:3,
            [Symbol.iterator]:Array.prototype[Symbol.iterator]
        }
        for(let item of arr){
            console.log(item)//a,b,c
        }//注意此方法只针对类数组,对于普通数组是没有效果的。
    let cat =Symbol('name')//他的参数是个字符串,代表对Symbol的描述
        //第一种写法
        let a={}
        a[cat]='yingduan'
        //第二种写法
        let a={
            [cat]:'yingduan'
        }
        //第三种写法
        let a={}
        Object.defineProperty(a,cat,{value:'yingduan'})
        //上面三种写法是一个效果
        a[cat]//'yingduan'
    
        //如果你的属性是Symbol的话,必须要用[]来获取,不能用.它的运算符。。//a[Symbol]
    
        //属性名的遍历.  Object.getOwnPropertySymbol()方法
        Object.getOwnPropertySymbol(a)//拿到属性是Symbol,然后放在数组里
    
        //Symbol.for()
        let b=Symbol.for('foo')
        let c=Symbol.for('foo')
        b===c //true //通过Symbol.for 声明的Symbol会提交到全局,并且他们是相同
        //但是 通过 Symbol()声明的他们就不是相等的
        let b=Symbol('foo')
        let c=Symbol('foo')
        b===c //false
    
        //
        Symbol.keyFor(b)//这时它会返回一个已登记的Symbol创建它时描述性的字符串
    
        //Interator(遍历器),为不同的数据结构提供统一的访问机制,任何数据只要部署了interator接口,就可以进行遍历操作
        //一个数据结构只要有Symbol.iterator属性就认为是可以用 for...of遍历的
        // 对象本身是没有Symbol.iterator属性的,所以我么可以给他手动加一个,然后遍历
        let obj ={
            [Symbol.iterator]:function(){
                return {
                    next:function (){
                        return {
                            value:1,
                            done:true
                        }
                    }
                }
            }
        }
        //数组是不用做任何处理就能使用 for...of遍历的,因为原生它就有Symbol.iterator这个属性
        
        //对于类数组的遍历:
        let arr ={
            0:'a',
            1:'b',
            2:'c',
            length:3,
            [Symbol.iterator]:Array.prototype[Symbol.iterator]
        }
        for(let item of arr){
            console.log(item)//a,b,c
        }//注意此方法只针对类数组,对于普通数组是没有效果的。
  • 相关阅读:
    Javascript online compressor
    Asp.net mvc 3 JSON post & AOP
    Javascript Clone
    LiveRTMP之对接海康、大华等IPCamera SDK进行RTMP直播推送
    H5实现视频监控网络直播时前端自动适配
    监控物联网直播时遇到iOS无法播放HLS流的问题解决
    LivePlayer RTSP/RTMP/HTTP/HLS全功能播放器
    [转载]LivePlayer实现直播抓拍
    LiveRTMP内置IPCamera实现RTMP直播摄像机功能
    使用LiveNVR实现RTSP视频监控、直播推送
  • 原文地址:https://www.cnblogs.com/menggege/p/14136111.html
Copyright © 2020-2023  润新知