做用函数
一种全新的原始数据类型,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