Symbol是es6新增的数据结构,主要的意义是创建独一无二的值,用法为

Symbol(description)

将这个返回值付给一个变量,那这个变量的值就是一个独一无二的值,即使在之后有使用了同一个description创造了一个Symbol,这两个值也是不同的

var a=Symbol('a')
var b=Symbol('a')
a==b //false

Symbol的主要目的是声明唯一的值,而有许多延伸的用法,为变量的属性使用symbol进行命名可以保证没有同名变量相互影响的问题,同时,Symbol的一般为局部变量,所以可以利用这个特性实现类似私有属性的效果,symbol声明的属性只有通过内部的方法才可以查看,在一般的属性遍历函数或者是直接访问实例或者是对象的属性都是无法读取的。

const Example = (function() {
    var _private = Symbol('private');

    class Example {
        constructor() {
          this[_private] = 'private';
        }
        getName() {
          return this[_private];
        }
    }

    return Example;
})();

var ex = new Example();

console.log(ex.getName()); // private
console.log(ex._private); // undefined

同时,如果想在全局声明symbol,使用Symbol.for()进行声明

想要访问对象中的symbol属性,可以使用getOwnPropertySymbols方法