Symbol本质上是一种唯一标识符,可用作对象的唯一属性名,这样其他人就不会改写或者覆盖你的属性值。
- 怎样声明?
let id = Symbol("id");
typeof(id) //symbol
- Symbol的两个特点
- 唯一性,同一个变量生成的值也不相同
let id1 = Symbol('id');
let id2 = Symbol('id');
console.log(id1 == id2) //false;
-隐藏性,for…in,Object.keys()不能访问
let id = Symbol("id");
let obj = {
[id]:'Symbol'
};
for(let option in obj){
console.log(obj[option]) //空
}
//获取的方法
//Object.getOWnPropertSymbols(obj);返回一个数组,成员是当前对象的所有用作属性名的Symbol值
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?
let name1 = Symbol.for('name');
let name2 = Symbol.for('name');
console.log(name1===name2) //true
console.log(Symbol.keyFor(name1)); // 'name'
console.log(Symbol.keyFor(name2)); // 'name'