ES6 新增的类型Symbol
Symbol 是ES6中新增的一种数据类型,是唯一的标识符,可以作为对象的唯一属性名;
Symbol 可以代替一个常量,指的常量的值唯一;
Symbol 的特点:
唯一性:即使两个变量类型,值都一样,也不相等;
let id1 = Symbol('id');
let id2 = Symbol('id');
console.log(id1 == id2); //false
隐藏性: 用 [] 标识的symbol类型作为对象的属性的时候,不能被for in 访问
let id = Symbol("id");
let obj = {
[id]:'symbol'
};
for(let option in obj){
console.log(obj[option]); //空
}
但是也可以通过方法访问:Object.getOwnPropertySymbols
let id = Symbol("id");
let obj = {
[id]:'symbol'
};
let array = Object.getOwnPropertySymbols(obj);
console.log(array); //[Symbol(id)]
console.log(obj[array[0]]); //'symbol'
虽然这样保证了Symbol的唯一性,但我们不排除希望能够多次使用同一个symbol值的情况。
为此,官方提供了全局注册并登记的方法:Symbol.for()
let name1 = Symbol.for('name'); //检测到未创建后新建
let name2 = Symbol.for('name'); //检测到已创建后返回
console.log(name1 === name2); // true
通过Symbol.keyFor() 获取参数值
let name1 = Symbol.for('name');
let name2 = Symbol.for('name');
console.log(Symbol.keyFor(name1)); // 'name'
console.log(Symbol.keyFor(name2)); // 'name'
还没有评论,来说两句吧...