错误之处,欢迎指正。
1. 简介
符号常用于给对象设置私有属性,是ES6
新增的数据类型。(String
,Number
,Boolean
,undefined
,null
,Array
,Function
,Object
,Symbol
)
2. 普通符号
- 符号不具有字面量。
- 每次调用
Symbol
函数,得到的普通符号永远不会相等,就算是描述信息相同。 - 符号可以作为对象的属性名存在,称之为符号属性。
const name = Symbol('name');
const obj = {
[name]: 'chris' //计算属性名,表达式。
}
- 符号属性不可枚举。
const name = Symbol('name');
const obj = {
age: 12,
[name]: 'chris' //计算属性名,表达式。
}
for (const key in obj) {
console.log(key); //age
}
console.log(Object.keys(obj)); //["age"]
console.log(Object.getOwnPropertySymbols(obj)); //[Symbol(name)]
3. 共享符号
const name = Symbol.for('name');
const name1 = Symbol.for('name');
console.log(name === name1); //true
共享符号可通过创建全局变量的方式实现。