es5中对象的属性名是都是字符串,容易造成重名; es6引入Symbol数据类型(已有Number 、 String 、 Boolean 、 Object、 null 和 undefined 类型);
一、 创建symbol属性值
let symb=Symbol();
console.log(symb);
console.log(typeof(symb))
let symb=Symbol();
let symb2=Symbol();
console.log(symb==symb2); // 返回false
1、向对象里额外加个属性
// 定义一个对象
let symbol=Symbol('id'); // 可以加参数 指定属性名
let obj={name:'tom',age:18};
// 假如我们要向对象里额外加个属性
// obj.id='01' // 以前的写法,不过假如属性很多的时候,可能会出现属性重复
obj[symbol]='01' // 这样能保证属性不重复
console.log(obj)
2、Symbol定义常量
因为Symbol具有唯一性,所以我们可以做Symbol定义常量
const System_key=Symbol('yuwye98989');
console.log(System_key);
3、Symbol.for() 全局搜索指定key的Symbol,找到的话,就返回该Symbol,找不到,就新建一个
console.log(Symbol("xiaozhi") === Symbol("xiaozhi")); // false
console.log(Symbol.for("hello") === Symbol.for("hello")); // true
4、Symbol.keyFor() 返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。
let key = Symbol.for("hello world !");
console.log(Symbol.keyFor(key)); // 返回bar1