#ES6 新增数据类型 Symbol
> 基本数据类型有 6 种:Undefined、Null、Boolean、String、Number、Object,ES6 新增 Symbol 类型, 表示独一无二的值(英文释义:象征;符号;标志),Symbol 是一种特殊的、不可变的数据类型,可以作为对象属性的标识符使用
> Symbol 类型出现的原因:是由于 es6 以前对象的 key 也就是属性名是都是以字符串定义,为避免属性名与第三方库或者某个不知名标准引发冲突所新增
---
> Case:
1). Symbol类型数据不可以和其他类型数据进行运算!
2). 不可以通过for in,for of,Object.keys/values检索Symbol属性或值,只能通过Object.getOwnPropertySymbols(),Reflect.ownKeys检索,前者检索所有属性,后者仅检索Symbol属性。
3). 取对象内Symbol类型属性时, 切记不可使用.的方式,这时取到的是字符串,而非Symbol属性
- Symbol 声明方式
-
```javascript
/* 不可以使用new 关键字去声明, Symbol函数直接声明 */
let a = Symbol(); /* Symbol() */
let b = Symbol('description'); /* Symbol('description') 这是的字符串至关重要,用于描述该Symbol值作用,最好语义化,便于阅读 */
let c = Symbol({ c: 1 }); /* Symbol([object Object]) */
let c = Symbol.for() //传入参数为该Symbol在注册表中的键,如果已有则直接获取,并返回该键的值,如未有则创建并返回。
let c = Symbol.keyFor() //返回 通过 Symbol.for() 所注册 Symbol键,并返回如果未有,则返回undefined
```
- Symbol 使用场景
-
```javascript
let s = Symbol.for("clouds");
console.log(Symbol.keyFor(s)); //返回 键
let ss = Symbol("clouds");
console.log(Symbol.keyFor(ss)); //非 for 注册, 返回undefined
let private = Symbol();
function Public() {
this[private] = 'is my own';
this.private = 'is anoher own';
}
let my = new Public();
console.log(my[private], my.private); /* is my own,is anoher own */
```
- 01.let-const
- 02.对象数组解构&赋值
- 03.字符串扩展,数值扩展,数组扩展
- 04.数组扩展
- 05.对象扩展
- 06.06.Symbol原始数据类型
- 07.set数据结构
- 08.map数据结构
- 09.proxy与Reflect
- 10.类
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module与模块化
- 15.es6学习总结
- 记录- Vue拖拽实例
- 记录-git使用天坑之分支切换
- node -- session & cookie & localStorge
- 18.12关于前端战略技术储备与问题反馈
- Vue组件通信方式总结以及遇到的问题
- 01.版本回溯以及文件修改
- 02.远端控制
- 03.分支管理
- node 入门 留言板
- nodejs模块与 commonjs 规范
- 19年技术发展规划
- JS错误处理 -> 提升程序健壮性
- Git 基本使用
- 18年年终总结