什么是Symbol?
Symbol可以认为是ES6新增的一种数据类型,而且是一种值类型。表示独一无二的值!
为什么要使用Symbol?
ES5中对象属性都是用字符串来定义的,当对象使用的多时,有可能会遇到对象属性命名重复的冲突,在ES6中,为了解决这种冲突,所以产生了新的数据类型,也就是Symbol出现及使用的原因!
如何使用Symbol?
示例1:
//使用Symbol函数执行来生成一个Symbol数据类型
let a = Symbol();
console.log(Object.prototype.toString.call(a));
//输出结果是[object Symbol]
从示例1可以知道变量a是一个Symbol类型的值。
示例2:
let s1 = Symbol('foo');
let s2 = Symbol('bar');
s1 // Symbol(foo)
s2 // Symbol(bar)
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"
从示例2我们要知道一个点:Symbol()的括号里面可以加一个字符串。那么加这个字符串是干嘛用的呢?
其实这个字符串可以将其理解为一个标志参数,用于标志这个独一无二的变量,当我们将这个变量使用toString()方法转为字符串类型时候,可以利用这个标志进行相应区分!但是要注意一点:Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。
示例3:
// 没有参数的情况
let s1 = Symbol();
let s2 = Symbol();
s1 === s2 // false
// 有参数的情况
let s1 = Symbol('foo');
let s2 = Symbol('foo');
s1 === s2 // false
从示例3可以知道这点:s1和s2都是Symbol函数的返回值,而且参数相同,但是它们是不相等的。