symbol常见用法
时间: 2023-09-09 07:06:25 浏览: 53
Symbol 常见用法如下:
1. 创建唯一的属性名
由于 Symbol 值是唯一的,因此可以用它来创建唯一的属性名,避免对象属性名冲突。例如:
```javascript
const key = Symbol();
const obj = {};
obj[key] = 'value';
console.log(obj[key]); // 'value'
```
2. 作为常量定义
由于 Symbol 值是唯一的且不可变,因此可以用它来定义常量。例如:
```javascript
const RED = Symbol();
const GREEN = Symbol();
const BLUE = Symbol();
function getColor(color) {
switch (color) {
case RED:
return 'red';
case GREEN:
return 'green';
case BLUE:
return 'blue';
}
}
console.log(getColor(GREEN)); // 'green'
```
3. 作为私有属性
由于 Symbol 值不会被暴露在对象的属性列表中,因此可以用它来作为私有属性。例如:
```javascript
const name = Symbol();
class Person {
constructor(n) {
this[name] = n;
}
getName() {
return this[name];
}
}
const person = new Person('John');
console.log(person.getName()); // 'John'
console.log(person[name]); // undefined
```
4. 作为 Iterator 对象的键
由于 Symbol 值是唯一的,因此可以用它来作为 Iterator 对象的键。例如:
```javascript
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
for (const value of myIterable) {
console.log(value);
}
// Output:
// 1
// 2
// 3
```
5. 作为内置 Symbol 值
JavaScript 还提供了一些内置的 Symbol 值,如 Symbol.iterator、Symbol.toPrimitive、Symbol.toStringTag 等,可以用来定制对象的行为。例如:
```javascript
const obj = {
[Symbol.toPrimitive](hint) {
if (hint === 'number') {
return 42;
} else if (hint === 'string') {
return 'forty-two';
} else {
return true;
}
}
};
console.log(obj + 1); // 43
console.log(obj.toString()); // 'forty-two'
console.log(String(obj)); // 'forty-two'
console.log(Number(obj)); // 42
console.log(Boolean(obj)); // true
```