es6symbol用法

{
  // 声明
  let a1=Symbol();
  let a2=Symbol();
  console.log(a1===a2);   //false  说明Symbol()声明的变量是唯一的,独一无二的
  let a3=Symbol.for('kk'); //kk被Symbol()声明且存在a3里
  let a4=Symbol.for('kk'); //kk已经被Symbol()声明过了且存在a3里,所以不需要再声明,直接把a3赋值给a4
  let a5=Symbol.for('a5'); //同理
  let a6=Symbol.for('a5');
  console.log(a3===a4);  //true  
  console.log(a5===a6);  //true
}

{
  let a1=Symbol.for('abc');
  let obj={
    [a1]:'123',
    'abc':345,
    'c':456
  };
  console.log('obj',obj); //{abc:345,c:456,Symbol(abc):"123"}
  //取非Symbol
  for(let [key,value] of Object.entries(obj)){
    console.log('let of',key,value);  
    //let of abc 345
    //let of c 456
  }
  //取Symbol
  Object.getOwnPropertySymbols(obj).forEach(function(item){
    console.log(item,obj[item]);     //Symbol(abc) 123
  })
  //取所有
  Reflect.ownKeys(obj).forEach(function(item){
    console.log('ownkeys',item,obj[item]);
    // ownkeys abc 345
    // ownkeys c 456
    // ownkeys Symbol(abc) 123
  })
}