ES6之前,javascript只有六种数据类型,分别是: undefined、null、Boolean、Number、String、Object
现在进入ES6 时代,我们的数据类型又多了一个新成员Symbol。正如他的中文意义,Symbol只是一个符号,他具有象征和代表意义。
那如此一说,Symbol象征和代表了什么?答案是:一个全局的独一无二的唯一值。
好难理解哇,这样,可以将一个Symbol的值想象为一个uuid。注意:这是为了理解,所以只能想象。因为uuid虽然是全局唯一的,但是他是一个字符串,而Symbol是一个独立的原始数据类型,他不是字符串。
创建一个唯一值
let s = Symbol()就是这么简单,通过Symbol()函数即可创建。
/* 以下是一个带参的,参数的意义仅仅是对Symbol 值的描述,方便我们在控制台打印时用于区分。
* 注意: 即使参数相同,Symbol的返回值也不想等。
*/
let s1 = Symbol("foo")
let s2 = Symbol("foo")
s1 === s2 //false重点: Symbol的返回值,无论什么情况下,永远是独一无二的。不可能有和他相等的,永远不可能。
怎么用,有何用?
作为对象的属性名
// 写法一
let s1 = Symbol("1")
let obj = {}
obj[s1] = "hello javascript"
// 写法二
let s2 = Symbol("2")
let obj={
[s2] : "hello symbol"
}然后,如何访问呢?很简单:obj[s1] 或 obj[s2]。注意:Symbol 值作为对象属性名时,不能用点运算符,只能使用上面示范的样式,即:对象[变量名]
作为一个值
这个值可以是对象在值,也可以是一个常量值。至于这个值是什么不重要,最最最关键的地方在于我们需要这个值必须唯一。
let obj = {
id : Symbol("id"),
name : Symbol("name")
}
console.log(obj.id)
const FOO = Symbol();
const BAR = Symbol();
function test(params){
if(params === FOO){
console.log("hello world")
}else if(params === BAR){
console.log("hello servlet")
}
}