Symbol 使用api
var symbol = Symbol("abc");
console.log(typeof symbol); //symbol
console.log(Array.isArray(symbol)); //false
console.log(Object.prototype.toString.call(symbol)); //[object Symbol]
console.log(symbol.description); //提取Symbol的描述 打印abc
Symbol.for() 在全局中声明 会在内存中开辟1个空间,使用 KeyFor获取 无论声明多少次 内存中只定义了1个Symbol
let bol = Symbol.for("tft");
//var symbol = Symbol("abc");这种写法声明了3个Symbol 如果声明多个等于重复创建了多个Symbol
console.log(Symbol.keyFor(symbol)); //undefined
console.log(Symbol.keyFor(bol));
场景: 使用Symbol定义对象的唯一属性名(键) eg:在调用接口时防止密码泄露
//写法1
var sym = Symbol();
var person = {};
person[sym] = "name";
console.log(person);
//写法2
var na = Symbol();
const normal = {
age: 20,
[na]: "lougou",
};
console.log(normal[na]);
//Object.keys不能获取到symbol类型
console.log(Object.keys(normal));
综合写法
const zoom = {
name: "张三",
agge: 20,
sex: "男",
[Symbol("艾瑞莉娅")]: "昂扬不灭",
key: Symbol("123"),
};
console.log(zoom);
console.log(JSON.stringify(zoom)); //{"name":"张三","agge":20,"sex":"男"}