6.Symbol类型(了解)

272 阅读1分钟

Symbol类型是原始数据类型,它表示是独一无二的。

const name = Symbol('tom');
const name2 = Symbol('tom');
console.log(name === name2);//false

一旦定义Symbol类型的变量值,即使定义的值是相同的,name和name2也是独一无二的,它们的内存地址是不同的。

Symbol的主要用途是用于定义对象的私有变量

let name = Symbol('name');
let obj = {
    //name:'tom'//这种赋值方式赋上的值{name: "tom"}     ①
    //[name]:'tom'//这种方式赋上的值{Symbol(name): "tom"}   ②
};
obj[name] = 'tom';//这种方式赋上的值{Symbol(name): "tom"}   ③
console.log(obj);//{Symbol(name): "tom"}
console.log(obj.name);//undefined
console.log(obj[name]);//tom

给对象的Symbol类型的私有变量赋值的时候应当使用上述②或③两种方式,使用第一种方式赋上的值并不会是Symbol类型,同时对Symbol类型的私有变量进行取值的时候也应当使用对象[变量名]进行取值。

无法对对象内Symbol类型的私有变量进行遍历

let name = Symbol('name');
let obj = {
    [name]: 'tom'
};
for (let key in obj) {
    console.log(key); //取不到值
}

获取Symbol声明的属性名(作为对象的key)

//方式一
let s = Object.getOwnPropertySymbols(obj);
console.log(s[0]);//Symbol(name)
//方式二,使用反射
let m = Reflect.ownKeys(obj);
console.log(m[0]);//Symbol(name)