Symbol数据类型核心内容

  • Post author:
  • Post category:其他





Symbol

数据类型简单介绍

通过声明

Symol

,可以形成一个

独一无二

的值。

将这个值用于对象中,可以避免key的重复。



3种声明方式&各自的特点


方法一,

Symbol()

  1. 重复声明则每次都会生成独一无二的值,互不相等。
  2. 在控制台的输出都是

    Symbol()

    ,不利于区分。
  3. 未登记在全局。
let s1 = Symbol()


方法二,添加了用于描述的字符串

  1. 重复声明则每次都会生成独一无二的值,互不相等。
  2. 在控制台的输出包含括号内的参数,利于区分。
  3. 未登记在全局。
let s1 = Symbol('foo')


方法三,

Symbol.for

  1. 定义在全局的环境中,

    声明多次实则生成一个

  2. 在控制台的输出包含括号内的参数,利于区分。
let s1 = Symbol.for('foo')
let s2 = Symbol.for('foo')
console.log(s1 === s2) // true




Symbol.keyFor(**)


作用

:用于检验

Symbol

是否全局登记过

const s1 = Symbol('foo')
console.log(Symbol.keyFor(s1)) // undefined
const s2 = Symbol.for('foo')
console.log(Symbol.keyFor(s2)) // foo



使用场景







Symbol

作为对象的

key

,以保证对象的

key

不冲突

如不使用

Symbol

,相同的key,后者会覆盖前者。

const stu1 = Symbol('小王')
const stu2 = Symbol('小王')
const grade = {
    [stu1]: {address: 'yyy', tel: '222'},
    [stu2]: {address: 'zzz', tel: '333'},
}
console.log(grade)
// {
//  [Symbol(小王)]: { address: 'yyy', tel: '222' },
//  [Symbol(小王)]: { address: 'zzz', tel: '333' }
// }



  1. 定义类(

    class

    )时,使用

    Symbol

    定义的实例属性,可以被实例方法引用,不能被

    forin



    Object.keys

    遍历,

    forin



    Object.keys

    仅能遍历普通实例属性;

  2. Object.getOwnPropertySymbols

    只能获取到

    Symbol

    属性;

  3. Reflect.ownKeys

    方法可遍历普通实例属性以及

    Symbol

    定义的实例属性。





用于消除魔术字符串,使用

Symbol

数据类型替换普通字符串。

const shapeType = {
    triangle: Symbol(),
    circle: Symbol()
}
function getArea(shape) {
    let area = 0
    switch (shape) {
        case shapeType.triangle:
            area = 1
            break
        case shapeType.circle:
            area = 2
            break
    }
    return area
}

欢迎点赞~



版权声明:本文为weixin_46557501原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。