数据类型之Symbol

前言:

我们知道es5之前共有5种数据类型,分别是:undefined,null,string,boolean,number;
但在es6中新增了一种Smybol数据类型,它是一种类似于字符串的数据类型,用来保证每个属性的名字都是独一无二的.
1.声明方法如下:

let s =Symbol();
console.log(typeof s);//symbol类型

注意点:不用new关键字;

2.Symbol函数可以接受一个字符串作为参数

let s1=Symbol("foo")
console.log(s1);//Symbol(foo)
console.log(s1.toString());//"Symbol(foo)"


3.对Symbol了解而已,但是自己没有用到.
具体文档可以参考文档:https://www.cnblogs.com/sker/p/5474591.html
http://es6.ruanyifeng.com/#docs/symbol

// Symbol:代表独一无二的值
{
    // 声明
    let a1 = Symbol();
    let a2 = Symbol();
    console.log(a1 === a2);//false

    //声明同一个Symbol的方法,使用for方法,里面加一个字符串
    let a3 = Symbol.for('a3');
    let a4 = Symbol.for('a3');
    console.log(a3 === a4);//true
}
//用法:常用在对象的属性上
{
    let a1 = Symbol.for('abc');
    let obj = {
        [a1]: '123',//方括号是动态绑定
        'abc': 345,
        'c': 456
    };
    console.log(obj);//{ abc: 345, c: 456, [Symbol(abc)]: '123' }  
    //Object.entries(obj)方法返回键值对的数组,如Object.entries({ foo: 'bar', baz: 42 }); 输出 [ ['foo', 'bar'], ['baz', 42] ]
    for (let [key, value] of Object.entries(obj)) {
        console.log('let of', key, value);
        //abc 345
        //c 456

    }
    console.log(Object.getOwnPropertySymbols(obj));//[ Symbol(abc) ]
    
    Object.getOwnPropertySymbols(obj).forEach(function (item) {
        console.log(obj[item]);//123

    })
    console.log( Reflect.ownKeys(obj));// Reflect.ownKeys(obj)
    
    Reflect.ownKeys(obj).forEach(function (item) {
        console.log('ownkeys', item, obj[item]);
        //abc 345
        //c 456
        // Symbol(abc) 123

    })
}

```js

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