ES6_Symbol
介绍
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript 语言的第七种数据类型,是一种类似于字符串的数据类型。
特点
1)Symbol 的值是唯一的,用来解决命名冲突的问题
2)Symbol 值不能与其他数据进行运算
3)Symbol 定义 的 对象属 性 不能 使 用 for…in 循 环遍 历 ,但是可以使用Reflect.ownKeys 来获取对象的所有键名。
Symbol.for方法会根据给定的键 key,来从运行时的 symbol 注册表中找到对应的 symbol,如果找到了,则返回它,否则,新建一个与该键关联的 symbol,并放入全局 symbol 注册表中。
使用:
1、创建symbol方式1
let s=Symbol();
symbol好比身份证号,参数是姓名,姓名可以重复,但身份证号不行
let s2=Symbol("路飞");
let s3=Symbol("路飞");
console.log(s2===s3);//它们的返回结果是不一样的,就相当于它们参数都是路飞,但是编号不一样。
2、创建symbol方式2
let s4= Symbol.for("ace");
let s5= Symbol.for("ace");
console.log(s4===s5);
这两种方式的区别:
通过这种方式可以通过描述字符串得到唯一的symbol的值,Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,你调用30个Symbol会得到30个不一样的值,但是Symbol for 会得到一个相同的值。
对象添加symbol类型的属性
symbol就是用来创建全局唯一的值,多人协作时可以防止命名冲突。
为了防止你创建和方法和对象本身的方法冲突,选择在另一个对象中用symbol创建独一无二的方法,用[]调用,不会污染本身对象中的方法。
如:
①给game对象添加up down两个方法。

一般做法:
gamee.up=function(){};
这样做万一里面有up方法,不就把原来的覆盖了吗,所以i要用打开这个额对象看里面结构,万一结构复杂,还要看很久。效率低而且不安全。
正确方法:
声明一个对象,这样up和down肯定不会冲突。

然后再给game添加这个对象里的方法

调用:
game[methods.up]();
②将对象属性添加symbol类型的结果,这样也不会影响对象的方法
