symbol
学习
基础
symbol
是ES6新增的一种基本数据类型symbol
表示一个独一无二的值,它和任何值都不相等。测试如下:
symbol
作为属性名
-
symbol
作为对象的属性名是唯一的不会被覆盖
-
symbol
作为对象的属性名也无法正常被获取到
-
但
symbol
也不是完全无法获取到的,可以用一下两种办法获取
1、使用Object.getOwnPropertySymbols()
方法或对象中的symbol
属性
2、使用Reflect.ownKeys()
方法获取对象中包含symbol
的所有属性名
Symbol.for()
与Symbol.keyFor()
Symbol.for()
- 使用
Symbol.for()
创建一个变量,它会现在全局查询是否有用同样方法创建的的同一symbol,若有就直接拿过来,没有就新创建一个
Symbol.keyFor()
- 使用
Symbol.keyFor()
传入使用Symbol.for()
创建的symbol,返回创建时传入的标识,若传入其他的则返回undefined
Symbol
的内置方法(部分)
-
Symbol.hasInstance
:自定义instanceof
操作符在某个类上的行为
-
Symbol.isConcatSpreadable
:用于配置某对象作为Array.prototype.concat()
方法的参数时是否展开其数组元素
-
Symbol.species
:允许子类覆盖对象的默认构造函数