Symbol
Symbol的特点
- Symbol 是一种根底的数据类型。也就是说:应用
typeof
失去的是symbol
类型。 - 每个Symbol都是惟一的,所以当比拟两个Symbol的时候,会失去false
- Symbol值能够作为对象属性的标识符,这是Symbol存在的意义。
// 'sym'是形容,跟值没有关系const sym = Symbol('sym') console.log(typeof sym) // symbolconst a = Symbol()const b = Symbol()console.log(a===b) // false console.log(a==b) // false const obj = { [Symbol()]: '姓名', age: 18}
- Symbol 是一种根底的数据类型。也就是说:应用
Symbol能做什么?
Symbol定义一些 不心愿他人拜访的属性。
下面曾经说了Symbol能够作为对象属性的标识符,然而为什么要用呢?咱们先看一个简略的例子。
[Symbol()]: '姓名', age: 18 } Object.keys(obj) // [ 'age' ] for(let key in obj) { console.log(key) // age } ``` - 通过代码咱们能够看到,通过Symbol定义的属性,是无奈通过for in or Object.keys 查找的,这样咱们就能够用Symbol定义一些 不心愿他人拜访的属性。同时咱们能够通过以下办法进行查问 ```js const obj = { [Symbol(1)]: '姓名1', [Symbol(2)]: '姓名2', age: 18 } console.log(Object.getOwnPropertySymbols(obj)) // [ Symbol(1), Symbol(2) ] console.log(Reflect.ownKeys(obj)); // [ 'age', Symbol(1), Symbol(2) ] ```2. 应用Symbol 定义公有的属性和办法 ```js // 2.js const PASSWORD = Symbol() class Login { constructor(username, password) { this.username = username this[PASSWORD] = password } checkPassword(pwd) { return this[PASSWORD] === pwd } } module.exports = Login // 1.js const Login = require('./2.js') const PASSWORD = Symbol() const login = new Login('admin', '123456') console.log(login.checkPassword('123456')) // true console.log(login.username) // admin console.log(login['PASSWORD']) // undefined console.log(login[PASSWORD]) // undefined ``` - 下面代码分两个模块,通过commonjs引入,利用Symbol的唯一性,实现公有属性。checkPassword曾经检测以后的PASSWORD是123456,然而因为Symbol的唯一性,1.js模块无奈生成雷同的Symbol,所以拜访不到这个属性。