美文网首页
Javascript 数据类型 Symbol

Javascript 数据类型 Symbol

作者: 龚达耶 | 来源:发表于2019-09-26 16:53 被阅读0次

ES6中我们新加入了Symbol作为数据类型,来表示独一无二的值。书中介绍如果我们使用他人提供的对象,但又想为对象添加新的方法,但是新方法的名字可能和之前的发生冲突,为了保证属性名字的独一无二Symbol就产生了。

//Symbol是一种类似于字符串形式的数据类型。

//接受一个字符串作为参数。
const l = Symbol('dog')
console.log(l) //Symbol(dog)

// Symbol 不能参与运算
//console.log(l+1); //  Cannot convert a Symbol value to a number

//就算带有相同参数的Symbol返回值都不相等
const m = Symbol('dog')
console.log(m===l); // false

//当Symbol作为属性的标识符时不能使用点运算符
// 因为点运算符后面接字符串所以n的属性名是字符串不是Symbol
const n = {}
const o = Symbol();
const p = Symbol();
n.o = 'ddw';
n[p] = 'ddw2'
console.log(n[o]); // undefined
console.log(n[p]); // ddw2

//所以在对象内部时我们必须加方括号要不然就是字符串了

const q = Symbol();
const r = Symbol('ddw');
let s = {
    [p]: 1,
    q:2
}
console.log(s); //q: 2  Symbol(): 1

// 当然我们也可以消除魔术字符串
const test1 = (para) => {
    switch (para) {
        case 'gongdaye':
            console.log('ddw1');
            break;
        case 'wangdaye':
            console.log('ddw2');
            break;    
    }
}
test1('gongdaye') //此时出现具体字符串我们需要消除

const dayeType = {
    gongdaye: Symbol(),
    wangdaye: Symbol()
}
const test2 = (para) => {
    switch (para) {
        case dayeType.gongdaye:
            console.log('ddw1');
            break;
        case dayeType.wangdaye:
            console.log('ddw2');
            break;    
    }
}
test2(dayeType.wangdaye)

//Symbol作为属性名只能被Object.getOwnPropertySymbols返回
console.log(Object.getOwnPropertySymbols(s))

相关文章

网友评论

      本文标题:Javascript 数据类型 Symbol

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