多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[链接](https://www.jianshu.com/p/f40a77bbd74e) ### Symbol > Symbol是Es 6新增的一种数据类型,是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用,表示独一无二的值 **语法** - `Symbol([description])` `description` - 可选的字符串,可用于调式但不访问符号本身的符号的说明,如果不加参数,在控制台打印的都是`Symbol`,不利于区分 **用途** - 作为属性名的`Symbol` ~~~ let symbolProp = Symbol() var obj = {} obj[symbolProp] = 'hello Symbol' var obj = { [symbolProp] : 'hello Symbol'; } var obj = {}; Object.defineProperty(obj,symbolProp,{value : 'hello Symbol'}); ~~~ Symbol类型的key是不能通过`Object.keys()`或者`for...in`来枚举的,它未被包含在对象自身的属性名集合(property names)之中 ~~~jsx let obj = { [Symbol('name')]: '一斤代码', age: 18, title: 'Engineer' } Object.keys(obj) // ['age', 'title'] for (let p in obj) { console.log(p) // 分别会输出:'age' 和 'title' } Object.getOwnPropertyNames(obj) // ['age', 'title'] ~~~ 当使用JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外: ~~~bash JSON.stringify(obj) // {"age":18,"title":"Engineer"} ~~~ 让“对内操作”和“对外选择性输出”——获取以Symbol方式定义的对象属性 ~~~jsx // 使用Object的API Object.getOwnPropertySymbols(obj) // [Symbol(name)] // 使用新增的反射API Reflect.ownKeys(obj) // [Symbol(name), 'age', 'title'] ~~~ #### 应用场景2:使用Symbol来替代常量 #### 应用场景3:使用Symbol定义类的私有属性/方法