关于es6:Symbol

8次阅读

共计 1363 个字符,预计需要花费 4 分钟才能阅读完成。

Symbol

  1. Symbol 的特点

    • Symbol 是一种根底的数据类型。也就是说:应用 typeof 失去的是 symbol 类型。
    • 每个 Symbol 都是惟一的,所以当比拟两个 Symbol 的时候,会失去 false
    • Symbol 值能够作为对象属性的标识符,这是 Symbol 存在的意义。
    // 'sym' 是形容,跟值没有关系
    const sym = Symbol('sym') 
    console.log(typeof sym) // symbol
    
    const a = Symbol()
    const b = Symbol()
    console.log(a===b) // false 
    console.log(a==b) // false 
    
    const obj = {[Symbol()]: '姓名',
      age: 18
    }
  2. Symbol 能做什么?

    1. 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,所以拜访不到这个属性。
正文完
 0