做用函數
一種全新的原始數據類型,js的基本數據類型。**不那麼深刻,就先簡單記個筆記學習
以前當不同的文件中,對同一個變量進行操做的時候,會有污染的狀況,因此爲了解決這種問題,約定俗稱會在屬性名中添加文件名。this
const obj = { [Symbol.toStringTag]: 'XObject' } console.log(obj.toString()) // [object XObject]
const obj1 = { [Symbol()]: 'symbol value', foo: 'normal value' } for(let key in obj1) { console.log(key) // foo } console.log(Object.keys(obj1)) // [ 'foo' ] console.log(JSON.stringify(obj1)) // {"foo":"normal value"} // 使用下面的方法,能夠獲取到symbol的屬性名 console.log(Object.getOwnPropertySymbols(obj1)) // [ Symbol() ]
// shared.js const cache = {} // a.js cache['foo'] = 123 // b.js cache['foo'] = 234 console.log(cache) // {foo: 234} // ============================================== // a.js cache['a_foo'] = 123 // b.js cache['b_foo'] = 234 console.log(cache) // {a_foo: 123, b_foo: 234}
// 經過symbol函數建立一個symbol類型的數據 const s = Symbol() console.log(s) // Symbol() console.log(typeof s) // symbol console.log(Symbol() === Symbol()) // false 獨一無二的數據 // 咱們能夠添加描述文本 console.log(Symbol('foo')) // Symbol(foo) console.log(Symbol('bar')) // Symbol(bar) // 對象的屬性名能夠是symbol類型也能夠是string類型 // a.js const name = Symbol() const person = { [name] : 'xm', say () { console.log(this[name]) } } // b.js person.say() // xm
有for方法能夠獲取到那個值spa
const s1 = Symbol.for('foo') const s2 = Symbol.for('foo') console.log(s1 === s2) // true // 須要注意的是,那個for對應的是字符串,因此true和'true'的效果是同樣的 console.log(Symbol.for(true) === Symbol.for('true')) // true