跳至主要內容

你不知道的Symbol

Mr.Cao...大约 2 分钟

你不知道的Symbol

简介

Symbol 是 ES6 推出的一种新的基本类型,那么这时候我们 js 的基本类型就有 7 种
分别是

  • undefined
  • null
  • number
  • string
  • Symbol
  • boolean
  • Object

其中前 6 中是基本类型 Object 是一个引用类型

Symbol 的基本数据类型,表示的是一个唯一值,自己和自己都不相等的值,symbol 是一种基本数据类型 (primitive data type)。Symbol()函数会返回 symbol 类型的值,每个从 Symbol()返回的 symbol 值都是唯一的。一个 symbol 值能作为对象属性的标识符;这是该数据类型仅有的目的。

基本特性

  • Symbol() 和 Symbol([key])
  • Symbol不能被new
  • Symbol.prototype 与 Object(Symbol())
  • Symbol不能与其他类型的值计算
    • 数学计算:不能转换为数字
    • 字符串拼接:隐式转换不可以,但是可以显示转换
    • 模板字符串
  • Symbol 属性不参与 for…in/of 遍历,不可枚举
    • Object.getOwnPropertySymbols可以回去一个对象中属性是Symbol类型的属性key,返回一个数组
    • Object.getOwnPropertyNames获取一个对象中除Symbol类型的其他属性key值,返回一个数组
    • Object.keys获取一个对象中除Symbol的属性key,返回一个数组

Symbol的内置方法

在ES6中Symbol内置了很多方法,正常情况下不下动

对象的唯一属性:防止同名属性,及被改写或覆盖

当一个对象里边有两个 Symbol 的时候这两个 key 是完全不一致的

let obj = {
  [Symbol()]: 1,
  [Symbol()]: 2
}
console.log(obj)

上边 obj 对象是有两个不同属性的,尽管写法上都一样但是运行时候是完全不一致的

消除魔术字符串:指代码中多次出现,强耦合的字符串或数值,应避免,而使用含义清晰的变量代替

const vote_plus = Symbol('vote_plus')
function reducer(action) {
  let state = {
    count: 0
  }
  switch (action.type) {
    case vote_plus:
      state.count++
      break
  }
  return state
}
reducer({
  type: vote_plus
})
上次编辑于:
贡献者: Caofangshuai
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8