Symbol() ,用于获取唯一的属性名避免与其他属性名冲突
let s1 = Symbol();//可加参数: Symbol('a')进行打印可区分
let s2 = Symbol();
console.log('相等?:',s1==s2); //false,无论是否有参数都不相等
Symbole 可以显示的转为字符串,布尔值,但是不能转为数字
Symbole 不可进行运算,例:"aaa"+s1,隐形转成 字符串并拼接,报错
var mySymbol = Symbol();
//第一种写法
var a = {};
a[mySymbol] = "Hello!";
//第二种写法
var a = {
[mySymbol]: "Hellow!",
};
//第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: "Hellow!" });
//以上写法的结果都相同
a[mySymbol]; // "Hellow!"
注意:Symbol值作为对象的属性名时不能使用点运算符,同理,在对象的内部使用Symbol值时也必须放在方括号中
//如果s不放在[]中,该属性名就是字符串,而不是Symbol
Symbol还可以定义一组常量,保证这组常量的值都是不相等
常量使用Symbol值最大的好处就是,其他任何值都不可能与之相同。
消除魔术字符串
魔术字符串就是指,在代码之中多次出现,与代码形成强耦合的某一个具体的字符串或数字,良好的代码风格应该消除魔术字符串,由含义清晰的变量代替。