参考转载 Symbol地址:
https://es6.ruanyifeng.com/#docs/symbol
ES6引入了一种新的原始基本数据Symbol,它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。
今天整理了Symbol的几个比较常用特点跟方法。
Symbol认识
- 唯一性
const s = Symbol(); //创建一个Smbol类型的数据
console.log(s)
const x = Symbol();
- 每一个Symbol值都有一个标记字符串,通过Symbol.description属性去拿到
// 给Symbol类型的数据分配一个字符串
const c = Symbol('foo');
const d = Symbol('rdd');
console.log(c.description)
console.log(d.description)
- Symbol作为属性名时,一定要加 [ ]
对象的属性(实例的属性)一般只有两种类型:字符串,Symbol
如果说这样子赋值,想要取到90,可以解构一下:
obj[Symbol()] = 90
-
Symbol.for()
会以标记字符串登记
不仅是个Symbol值还会把for里的字符串跟Symbol做一个一一对应
接受一个字符串,返回一个Symbol值,同时会在全局注册一个该字符串和Symbol值的对应关系
如果该字符串已经注册过了,就返回其对应的Symbol值
// 注册Symbol与字符串的关系
const e = Symbol.for('e')
const f = Symbol.for('e')
console.log(e === f)//true
- Symbol.keyFor() :
返回登记的key,接受一个Symbol值,返回其对应的字符串,针对由fro生成的Symbol值
- 根据属性名划分
属性名是字符串类型
属性名是Symbol类型
通过obj.getOwnPropertySymbol
获取自身的属性Symbol值 获取实例自身的以Symbol类型作为key的属性
object.getOwnPropertySymbol(obj)