Symbol

作者: 行走的蛋白质 | 来源:发表于2020-05-14 23:48 被阅读0次
    • Symbol 是一种新的原始数据类型,表示独一无二的值
    const sym1 = Symbol('sym')
    const sym2 = Symbol('sym')
    console.log(sym1 === sym2) // false
    
    • Symbol 可以通过 Symbol() 函数来生成,它不是构造函数没有 constructor 属性,所以不能通过 new Symbol() 来创建,不是对象所以也不能通过 . 来赋值,可以在 Symbol 函数中传入一个字符串表示说明,通过 description 属性来获取
    const sym1 = Symbol('sym')
    sym1.name = 'symbol'
    console.log(sym1) // Symbol(sym)
    console.log(sym1.name) // undefined
    console.log(sym1.description) // sym
    
    • Symbol 可以用来解决字符串耦合问题
    const obj1 = {
        name: 'sym'
    }
    const obj2 = {
        name: 'sym'
    }
    const obj3 = {
        [obj1.name]: 'sym1',
        [obj2.name]: 'sym2'
    }
    console.log(obj3) // { sym: 'sym2' }
    console.log(obj3[obj1.name]) // sym2
    console.log(obj3[obj2.name]) // sym2
    
    const obj1 = {
        name: 'sym',
        key: Symbol('sym')
    }
    const obj2 = {
        name: 'sym',
        key: Symbol('sym')
    }
    const obj3 = {
        [obj1.key]: 'sym1',
        [obj2.key]: 'sym2'
    }
    console.log(obj3) // { [Symbol(sym)]: 'sym1', [Symbol(sym)]: 'sym2' }
    console.log(obj3[obj1.key]) // sym1
    console.log(obj3[obj2.key]) // sym2
    
    • 对象遍历 Symbol 丢失问题
    const sym = Symbol()
    const obj = {
        name: 'sym',
        [sym]: 'symbol'
    }
    for(let k in obj) {
        console.log(k) // name
    }
    Object.getOwnPropertySymbols(obj).forEach(n => {
        console.log(n) // Symbol()
    })
    Reflect.ownKeys(obj).forEach(j => {
        console.log(j) // name Symbol()
    })
    

    相关文章

      网友评论

          本文标题:Symbol

          本文链接:https://www.haomeiwen.com/subject/fqbfohtx.html