Symbol,英译为符号。symbol是用于防止属性名冲突而产生的,比如向第三方对象中添加属性时。Symbol的值是唯一的,独一无二不会重复的。Symbol不可以添加属性。

可以传入字符串用于描述Symbol,方便区分。传入相同参数Symbol也是独立唯一的,因为参数只是描述而已。使用description可以获取传入的描述参数


Symbol.for会根据描述获取Symbol,如果不存在则新建一个Symbol。使用Symbol.for会将描述记录在系统中,而Symbol则不会。也就是说两个Symbol使用相同的描述,他们的结果是不同的,应为Symbol的值是唯一的、独一无二不会重复的。而使用Symbol.for时在第一次写入描述的时候它首先回去系统中查询是否已经有相同的描述,如果有直接拿过来用,如果没有新建一个Symbol。所以使用Symbol.for建立的两个相同的描述是相等的。


Symbol.keyFor 根据使用Symbol.for登记的Symbol返回描述,如果找不到返回undefined 。

对象属性:Symbol 是独一无二的所以可以保证对象属性的唯一。Symbol 声明和访问使用 [](变量)形式操作。

使用Symbol可以解决在保存数据时由于名称相同造成的耦合覆盖问题。Symbol 不能使用 for/in、for/of 遍历操作,可以使用 Object.getOwnPropertySymbols 获取所有Symbol属性。也可以使用 Reflect.ownKeys(obj) 获取所有属性包括Symbol。如果对象属性不想被遍历,可以使用Symbol保护
本文内容参考https://www.houdunren.com/,向军大叔很棒!
网友评论