返回

JS中的特殊变量Symbol介绍及其实战应用

前端







**Symbol介绍** 

SymbolES6中新增的基础类型,本身可以生成一个独一无二的值。Symbol值是不可变的,一旦创建就不能被修改。Symbol值是唯一的,即使两个Symbol值看起来相同,它们也是不相同的。

**Symbol的应用** 

Symbol的应用场景非常广泛,下面列举几个常见的应用场景:

* 作为对象的私有属性,避免外界调用
* 消除魔术字符串
* 作为唯一变量名使用,避免命名冲突
* 生成唯一ID
* 作为MapSet的键

**Symbol的语法** 

Symbol的语法如下:

const symbol = Symbol();


其中,symbolSymbol变量的名称。

**Symbol的属性和方法** 

Symbol具有以下属性和方法:

* Symbol.toString(): 返回Symbol值的字符串表示形式。
* Symbol.valueOf(): 返回Symbol值的原始值。
* Symbol.description: 返回Symbol值的。

**Symbol的兼容性** 

SymbolES6中引入,因此只支持ES6及以上的环境。

**Symbol的实战应用** 

下面列举几个Symbol的实战应用:

* 使用Symbol作为对象的私有属性,避免外界调用

const person = {
name: '张三',
age: 20,
[Symbol('password')]: '123456'
};

console.log(person.password); // undefined


* 使用Symbol消除魔术字符串

const ADD = Symbol('ADD');
const DELETE = Symbol('DELETE');

const actions = {
[ADD]: function(a, b) {
return a + b;
},
[DELETE]: function(a, b) {
return a - b;
}
};

console.log(actions[ADD](1, 2)); // 3
console.log(actions[DELETE](3, 2)); // 1


* 使用Symbol作为唯一变量名,避免命名冲突

const symbol1 = Symbol('symbol1');
const symbol2 = Symbol('symbol1');

console.log(symbol1 === symbol2); // false


**总结** 

Symbol是ES6中新增的基础类型,具有生成独一无二的值、不可变、唯一等特点。Symbol的应用场景非常广泛,可以作为对象的私有属性,避免外界调用;消除魔术字符串;作为唯一变量名使用,避免命名冲突等。