ES6 引入了一种新的原始数据类型Symbol
,表示独一无二的值。
1.基本用法
Symbol值通过Symbol函数来生成
let a = Symbol();
console.log(a); // Symbol
Symbol可以接收一个字符串作为参数,表示对Symbol实例的描述。
let a = Symbol('aa');
Symbol生成的值都是独一无二的,即使是相同参数的Symbol函数的返回值也是不同的。
let a = Symbol();
let b = Symbol();
console.log( a === b) // false
let c = Symbol('foo');
let d = Symbol('foo');
console.log( c === d) // false
2.作为属性名的Symbol
Symbol值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。
var name = Symbol('name');
var a = {};
a[name] = 1;
var a = {
[name]: 1
}
Object.definProerty(a,name,{value:1});
以上三种写法 输出的结果都是 a[name] = 1
3.用于实现类的私有属性
class Fruit {
constructor(){
var number = Symbol('number')
class _Fruit{
constructor(){
this[number] = 0;
}
setNumber(num){
this[number] = num;
}
getNumber(){
return this[number];
}
}
return new _Fruit();
}
}
var fruit = new Fruit();
console.log(fruit.getNumber()); // 0
fruit.setNumber(3);
console.log(fruit.getNumber()); // 3
console.log(fruit.number) // undefined