Symbol是es6新增的数据类型,用于创建唯一的标识符。通过Symbol()函数的创建每个Symbol值都是唯一的,哪怕他们的描述相同,也不相等。他主要用于对象属性的唯一标识,避免属性名的冲突。
那么Symbol()具体在什么情况下使用呢
先让我们看一个例子
这里打印出cy值为2,表明cy如果多次定义会覆盖掉原来的值,在大厂的大型项目中,对象复杂,可能会出现相同对象名的情况,这样就导致代码维护起来特别困难。
es6就新增了Symbol数据类型,用来避免出现属性覆盖的问题
Symbol的用法
上述操作用Symbol()在classmate对象中创建了包含grade gender属性的名为'mark'和'olivia'对象。
- 相比于es5定义cy的方式,symbol()函数创建的相同名字,甚至属性也相同的两个对象也是独一无二的
const classmate = {
[symOlivia]: {grade: 80, gender: 'female'},
// 可以再次使用 symOlivia 而不会造成冲突
对于传统的 Object 静态方法,如 Object.keys(), Object.values(), 和 Object.entries(),它们都不会包含 Symbol 类型的键。如果你想要获取 Symbol 键,你可以使用 Object.getOwnPropertySymbols() 方法。
- Object.keys() 对象的键名数组 但是不包括Symbol 类型的键名
- Object.value() 对象的键值数组 但是不包括Symbol 类型的键值
- Object.entries() 对象的键值对数组 但是不包括Symbol 类型的键值对
- 我们可以通过Object.getOwnPropertySymbols(classmate)来获得classmate对象中Symbol键的列表,去迭代Symbol键
ending
Symbol 数据类型为 JavaScript 提供了一种强大的工具,用于创建唯一标识符,从而有效地避免了对象属性名的冲突问题。在大型项目中,特别是在多个开发人员协作或集成第三方库的情况下,Symbol 的这一特性显得尤为重要。它不仅帮助我们维护更清晰、更安全的代码结构,还促进了更好的代码组织和可维护性。