JavaScript点运算符与方括号运算符

今天在看es6的时候看到的Symbol部分

const mySymbol = Symbol()
const a = {}
a.mySymbol = 'Hello!'
console.log(a[mySymbol])
console.log(a['mySymbol'])

 因为点运算符后面总是字符串,所以不会读取mySymbol作为标识名所指代的值,导致a的属性名实际上是一个字符串,而不是一个Symbol值,所以Symbol作为对象属性名的时候不能用点运算符

let s = Symbol();
let obj = {
    [s]: function(arg) { }
};
obj[s](123);
//上面的代码中如果s不放在方括号中,该属性的键名就是字符串s,而不是s所代表的那个Symbol值,采用增强写法,上面的obj对象可以更简洁些
let obj = {
    [s](arg) {  }
}
 
Sybmol类型还可以用于定义一组常量,保证这组常量的值都是不相等的
const log = {}
log.levels = {
  DEBUG: Symbol('debug'),
  INFO: Symbol('info'),
  WARN: Symbol('warn')
}
console.log(log.levels.DEBUG, 'debug message')
console.log(log.levels.INFO, 'info message')

另一个

const COLOR_RED = Symbol()
const COLOR_GREEN = Symbol()
function getComplement(color) {
  switch (color) {
    case COLOR_RED:
      return COLOR_GREEN
    case COLOR_GREEN:
      return COLOR_RED
    default:
      throw new Error('Undefined color')
  }
}
//常量使用Symbol值最大的好处就是,其他任何值都不可能有相同的值了,Symbol值作为属性名时,该属性是公开属性

 ........................想他

原文地址:https://www.cnblogs.com/vivin-echo/p/14066668.html