首先,为什么说叫所谓呢?因为在2007年之前Js给予我们typeof解析数据类型的一共有六种(一直有争议,但是我们暂时就按typeof来算)

 
'function''Number''Object''boolean''String''undefined'‘symbol’- 只要是对象就可以引用。 
- 只要是对象都可以赋予私有属性。 
- 对象都不相等。 
var s1 = Symbol.for('abc');var s2 = Symbol.for('abc');Symbol() === Symbol() //falses1 === s2    //trueSymbol.keyFor(s1)// 'abc'var s1 = Symbol.for([1,2,3]);Symbol.keyFor(s1); //  "1,2,3" 字符串的 1,2,3 var s1 = Symbol.for(function (){});Symbol.keyFor(s1); "function (){}"   字符串的fn; var a = {};       a[Symbol()]= 'Hello!';       a[Symbol()]= 'Hello!';       a[Symbol()]= 'Hello!';       console.log(a);      Object          Symbol(): "Hello!"          Symbol(): "Hello!"          Symbol(): "Hello!"      __proto__: Object  for(var i in a){           console.log(i +',' +a[i]) //没有任何的东西       }var a = Symbol('aaa');      b = {};      b[a] = 10 ;      console.log(b[a])//10 let b = {};      b[Symbol()]=10;      b[Symbol()]=15;      Object. getOwnPropertyNames(b) // let a = {};      a[Symbol()]=10;      a[Symbol()]=15;      Object.getOwnPropertySymbols(a) //[Symbol(),Symbol()] //这里面以数组的形式返回了 咱们使用的两个Symbol();      Object.getOwnPropertySymbols(a)[0]//Symbol() 第一个Symbol()      a[Object.getOwnPropertySymbols(a)[0]]//10 拿到存在的这个值。~NaN  //-1~function (){}//-1~undefined   //-1var a = function (){};~a()  //-1~new a() //-1~Symbol  //-1~Symbol() //报错var sym = Symbol('My symbol');"your symbol is " + sym     // TypeError: can't convert symbol to string   es5之前的报错`your symbol is ${sym}`     // TypeError: can't convert symbol to string   es6字符串照样的报错var sym = Symbol();Boolean(sym) // true!sym  // falseNumber(sym) // TypeErrorsym + 2 // TypeErrorlet arr = ['c', 'd'];['a', 'b'].concat(arr2,'e') //['a','b','c','d','e'];let arr2 = ['c', 'd'];arr2[Symbol.isConcatSpreadable] = false;['a', 'b'].concat(arr2, 'e') //['a','b',['c','d'],'e']JSON[Symbol.toStringTag]:'JSON'Math[Symbol.toStringTag]:'Math'Module对象M[Symbol.toStringTag]:'Module'ArrayBuffer.prototype[Symbol.toStringTag]:'ArrayBuffer'  DataView.prototype[Symbol.toStringTag]:'DataView'Map.prototype[Symbol.toStringTag]:'Map'Promise.prototype[Symbol.toStringTag]:'Promise'Set.prototype[Symbol.toStringTag]:'Set'%TypedArray%.prototype[Symbol.toStringTag]:'Uint8Array'等WeakMap.prototype[Symbol.toStringTag]:'WeakMap'WeakSet.prototype[Symbol.toStringTag]:'WeakSet'%MapIteratorPrototype%[Symbol.toStringTag]:'Map Iterator'%SetIteratorPrototype%[Symbol.toStringTag]:'Set Iterator'%StringIteratorPrototype%[Symbol.toStringTag]:'String Iterator'Symbol.prototype[Symbol.toStringTag]:'Symbol'Generator.prototype[Symbol.toStringTag]:'Generator'GeneratorFunction.prototype[Symbol.toStringTag]:'GeneratorFunction' Object.prototype.toString.call(new Map())//'[object Map]'Object.keys(Array.prototype[Symbol.unscopables])//['copyWithin', 'entries', 'fill', 'find', 'findIndex', 'keys']
