ES6——数据类型之 (Symbol)

简介: 数据类型之 (Symbol)

Symbol是ES6的新的一种基本数据类型是一种类似于字符串的数据类型

Symbol()函数会返回Symbol类型的值,该类型具有静态属性和静态方法。

每个从Symbol()返回的Symbol值都是唯一的。一个Symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。

其特点:

1、Symbol的值是唯一的,用来解决命名冲突的问题

2、Symbol值不能与其他数据进行运算

3、Symbol定义的对象属性不能使用for..in进行循环遍,但是可以使用Reflect.ownKeys来获取对象的所有键名

特点

不能与其他的数据进行比较以及运算(唯一性)

不能比较

例如:

<script>
    let a1 = Symbol('11');
    let a2 = Symbol('11');
    console.log(a1===a2);    //    flase
</script>

效果如下:

20211008135618664.png

如果需要比较即可在后面加上for

<script>
        let a1 = Symbol('11');
        let a2 = Symbol('11');
        console.log(a1===a2);        //flase
        let b1 = Symbol.for('22');    //这里加for
        let b2 = Symbol.for('22');
        console.log(b1===b2);        //true
    </script>

效果如下:

20211008135742325.png

不能与其他数据进行运算

例如:

let result = a2 + 100;     //报错
let result = a2 > 100;    //报错
let result = a1 + a1;    //报错

隐藏性,for···in不能访问

例如:

let a = Symbol('Nan');
        let obj = {
            [a]:'Chen'
        };
        console.log(obj);    //{Symbol(Nan): "Chen"}
        for (const option in obj) {
            console.log(obj[option]);    //啥都没有
        }

效果:

2021100814114028.png

使用Object.getOwnPropertySymbols方法可以进行访问

<script>
        let a = Symbol('Nan');
        let obj = {
            [a]:'Chen'
        };
        console.log(obj);
        for (const option in obj) {
            console.log(obj[option]);
        }
        let array = Object.getOwnPropertySymbols(obj);
        console.log(array);        //[Symbol(Nan)]
        console.log(obj[array[0]]);    //Chen 
</script>

打印效果:

20211008141640812.png

再看个例子:

let game = {
    up: 'upp',
    down: 'doown'
    }
    let methods = {
    up: Symbol(),
    down: Symbol(),
    }
    game[methods.up] = function(){
      console.log('up up up')
    }
    game[methods.down] = function(){
     console.log('down down down')
    }
    console.log('game----', game)
    game[methods.up]()

打印效果:

20211008142039726.png

相关文章
|
7月前
|
JavaScript 前端开发
ES6:什么是Symbol?
ES6:什么是Symbol?
85 1
|
1月前
|
设计模式 JavaScript 前端开发
es6加上symbol的基础数据类型
【10月更文挑战第30天】ES6 中的 `Symbol` 作为一种新的基础数据类型,为 JavaScript 提供了一种创建唯一标识符和处理对象属性名冲突的有效方式,丰富了 JavaScript 的数据类型体系和编程模式,在实际开发中具有重要的应用价值。
|
1月前
|
设计模式 JavaScript 前端开发
es6加上symbol的基础数据类型
【10月更文挑战第22天】ES6中的 `Symbol` 作为一种新的基础数据类型,为JavaScript提供了一种创建唯一标识符和处理对象属性名冲突的有效方式,丰富了JavaScript的数据类型体系和编程模式,在实际开发中具有重要的应用价值。
|
5月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(二)
58 1
|
5月前
|
存储 JavaScript 前端开发
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
JavaScript编码之路【ES6新特性之 Symbol 、Set 、Map、迭代器、生成器】(一)
43 0
|
7月前
|
存储 JavaScript
ES6+新特性-Symbol与Set/Map数据结构
ES6 引入了三种新的数据结构:Symbol、Set和Map。Symbol是唯一且不可变的值,常用于定义对象的独特属性;Set存储不重复值,适合数组去重;Map则是键值对集合,键可为任意类型,提供了更灵活的存储方式。这些新数据结构提供了更高效的操作手段,分别解决了属性命名冲突、数据去重和复杂键值对存储的问题。示例展示了如何使用Symbol、Set和Map进行基本操作。
|
7月前
ES6之Symbol
ES6之Symbol
|
7月前
|
JavaScript 前端开发
|
7月前
|
JavaScript 前端开发 开发者
|
7月前
|
JavaScript
js开发:请解释什么是ES6的Symbol,以及它的用途。
ES6的Symbol数据类型创建唯一值,常用于对象属性键(防冲突)和私有属性。示例展示了如何创建及使用Symbol:即使描述相同,两个Symbol也不等;作为对象属性如`obj[symbol1] = &#39;value1&#39;`;也可作枚举值,如`Color.RED = Symbol(&#39;red&#39;)`。
57 4