Symbol
Symbol类型
【Symbol】Symbol新的原始数据类型 (符号)表示独一无二的值
对象的key可以使用Symbol
具有静态属性和静态方法 不支持 new Symbol()
解决不同文件使用公共变量,互相影响,
//shared.js ==================================
const cache = {}//a.js ======================================
//cache['a_foo']|| cache['b_foo'] 以前的做法,约定好不同文件下的key,但是本质上并没有解决问题只是规避了问题
cache['foo'] = "VLAUE"//b.js ========================================
cache['foo'] = "VALUE1111"
const s = Symbol()
console.log(s);
//Symbol()
console.log(typeof s);
//symbol
console.log(Symbol() === Symbol(),Symbol("aa") === Symbol("aa"));
//false false
console.log(Symbol("aa"),Symbol("bb")) //描述文本 Symbol(aa) Symbol(bb)
可以添加为属性名
const obj1 = {
[Symbol()]:123
}
console.log(obj1);
案例
//创建私有变量
const name = Symbol()
const person = {
[name]:"zxa",
say(){
console.log(this[name]);
}
}//b.js
// person[Symbol()] //无法创建完全相同的Symbol,取不到成员
person.say() //可以拿到普通成员
静态方法
const s1 = Symbol.for() //内部维护了一个全局的注册表,为添加的标识字符串和Symbol值提供一一对应,下次再搜所给定key反现有symbol会返回不会新创建
const s2 = Symbol.for()
console.log(s1 === s2);
//true 如果添加描述字符串,则添加的描述字符串必须一致才true
console.log(Symbol.for(true) === Symbol.for("true"));
//true 会转化成字符串
注意Symbol作为key取不到
console.log(cache);
//{ foo: 'VALUE1111', [Symbol()]: 100, [Symbol()]: 200 }for (var key in cache){
console.log(key);
//拿不到Symbol的keyfoo
}
console.log(Object.keys(cache)) // [ 'foo' ]
console.log(JSON.stringify(cache));
// {"foo":"VALUE1111"}
//单独取Symbol()的方法
console.log(Object.getOwnPropertySymbols(cache));
//[ Symbol(), Symbol() ]
推荐阅读
- mysql|InnoDB数据页结构
- 接口|axios接口报错-参数类型错误解决
- 带你了解类型系统以及flow和typescript的基本使用
- 史前艺术的审美类型「清央美术」
- 认识图表
- MySQL|MySQL 5.7参考手册_11.1 数据类型概览
- 人的四种气质类型和四种血型性格辨析
- 二、Redis的五种常用数据类型
- js类型转换和内存
- 小程序开发|小程序开发 - 页面传值url类型