美文网首页
快速了解Es6中的Symbol

快速了解Es6中的Symbol

作者: 牛大嘴 | 来源:发表于2019-01-02 16:40 被阅读0次

    Symbol是Es6中的一个新特性,它是一个基本数据类型。

    javascript从Es6起,基本数据类型变为6种 , undefined、null、Number、String、Boolean、Symbol。

    Symbol的目的就是为了实现一个,唯一不重复的值,Symbol值它不能运算。

    Symbol值它是唯一的,两个Symbol值比较都不会相等。

    var s1 = Symbol()
    var s2 = Symbol()
    console.log(s1 == s2)  //false
    

    Symbol函数可以接收字符串作为一个参数,表示对Symbol值的描述,主要是为了好区分。

    var s1 = Symbol('Symbol')
    var s2 = Symbol(123)
    
    console.log(s1)  //Symbol(Symbol)
    console.log(s2) //Symbol(123)
    

    有时,我们希望重新使用同一个 Symbol 值,Symbol.for方法可以做到这一点,Symbol.for方法是全局的,简单的来说就是登记过的,如果是Symbol()值,会每次都会生成一个新的Symbol值,都是不同的。

    var s1 = Symbol.for(123)
    var s2 = Symbol.for(123)
    
    console.log(s1 == s2)
    

    上面代码中,s1和s2都是 Symbol 值,但是它们都是同样参数的Symbol.for方法生成的,所以实际上是同一个值 , Symbol值参数是描述。


    Symbol.keyFor方法返回一个已登记的 Symbol 类型值的key描述。

    var s2 = Symbol.for(123)
    console.log(Symbol.keyFor(s2)) // 123 
    
    var s1 = Symbol(123)        
    console.log(Symbol.keyFor(s1))  // undefined
    

    上面代码中,获取出来的是描述是字符串类型的,不管Symbol值的参数是什
    么,获取出来的都是String类型,只能获取登记过的Symbol值。


    Symbol值作为对象的属性名的几种方法。

    var s1 = Symbol(123)
    var obj = {}
    obj[s1] = 123
    console.log(obj)  //{Symbol(123): 123}
    
    var json = {
        [s1] : 123
    }
    console.log(json) //{Symbol(123): 123}
    

    上面代码要使用[]括号原因是,把它Symbol值当做一个变量解析,如果不写[]括号的话,会被当做一个字符串。


    Symbol值的内置属性就只有一个常用,将对象转换为iterator可遍历接口对象。

    const obj= {};
    obj[Symbol.iterator] = function* () {
      yield 1;
      yield 2;
      yield 3;
    };
    
    [...obj] // [1, 2, 3]
    

    如有问题望大牛指点

    相关文章

      网友评论

          本文标题:快速了解Es6中的Symbol

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