Die neuen Strukturen sind: 1. Symbol, das einen eindeutigen Wert darstellt und eine Funktionsstruktur ist 2. Set, das sich auf eine „Set“-Struktur bezieht, ähnlich einem Array, das die Speicherung ungeordneter und nicht wiederholbarer Daten ermöglicht; 3. WeakSet, ähnlich wie Set, können interne Daten keine doppelten Werte haben. 4. Map bezieht sich auf eine „Wörterbuch“-Struktur, die Zuordnungsbeziehungen speichern kann.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.
1. Symbol
Symbol
ist einer der neuen Basisdatentypen in ES6
. Jeder von der Funktion Symbol
zurückgegebene Symbol
-Wert ist eindeutig. Der symbol
-Wert dient als Bezeichner des Objektattributs und hat seinen einzigen Zweck. Symbol
是ES6
中新增的一个基本数据类型之一,它是一个函数。每一个从Symbol
函数返回的Symbol
值都是独一无二的,symbol
值作为对象属性的标识符,也是唯一的用途的。
const s1 = Symbol() const s2 = Symbol() console.log(s1 === s2); // false
symbol作为key
第一种方式,直接在对象的字面量中添加。
// symbol作为key const obj = { [s1]:'abc', [s2]:'cc', }
第二种方式,通过添加数组方式添加。
// 需要用数组方式来获取,不能通过点语法,否则会获取到字符串key console.log(obj[s1]);
第三种方式,通过对象中的defineProperty
方法添加。
const s4=Symbol() Object.defineProperty(obj,s4,{ configurable:true, enumerable:true, writable:true, value:'ff' })
通过symbol获取对应的值
需要用数组方式来获取,不能通过点语法,否则会获取到字符串key。
console.log(obj[s1]);
symbol
不能被隐式转换成string
类型。
注意:Symbol函数中的参数是symbol描述符,这是在ES10新增的特性
let Sym = Symbol("Sym") alert(Sym) // TypeError: Cannot convert a Symbol value to a string
我们不能直接alert
一个symbol
对象,但是我们可以通过toString
的方式或者.description
来获取symbol
对象的描述符。
let sym = Symbol('a') console.log(sym.description); // 'a'
遍历symbol
在使用for
遍历、object.keys
中是获取不到symbol
健的,对此object
还提供了getOwnPropertySymbols
方法,用于获取对象中所有symbol的key。
const sKeys=(Object.getOwnPropertySymbols(obj)); for(const skey of sKeys){ console.log(obj[skey]); }
全局symbol对象注册
有时,我们可能需要多个symbol
的值是一致的,我们可以通过symbol
提供的静态方法for
方法传入一样的描述符来使它们的值一致。
Symbol.for
该方法会在使用给定键搜索运行时符号注册表中的现有符号,并在找到时返回它。否则,使用此键在全局符号注册表中创建一个新符号。
const sa=Symbol.for('cc') const sb=Symbol.for('cc') console.log(sa===sb); //true
Symbol.keyFor
该方法用于获取全局symbol
的描述符。
const key =Symbol.keyFor(sb) console.log(key); // c
2、Set
Set
对象(类似数组)允许你存放任何数据类型,但里面的值不能重复。
const s1 = new Set() s1.add(10) s1.add(20) s1.add(30) s1.add(40) console.log(s1) // Set(4) { 10, 20, 30, 40 } s1.add(20) console.log(s1) // Set(4) { 10, 20, 30, 40 }
Set常用方法
方法 | 返回值 | 说明 |
---|---|---|
size | set 对象中的数量 | 返回set对象中的数量 |
add | Set 对象 | 添加元素 |
delete | boolean | 删除元素 |
has | boolean | Set 对象中是否存在这个值 |
clear | 无 | 清空Set 对象中的值 |
3、WeakSet
WeakSet
是类似Set
的另外一种数据结构,内部数据也不能有重复值。
Set
的区别WeakSet
只能存放对象类型,不能存放基本数据类型WeakSet
对元素是弱引用基本使用
const weakSet = new WeakSet(); let obj = { name: "_island" }; weakSet.add(obj);
WeakSet常用方法
方法 | 返回值 | 说明 |
---|---|---|
add | weakset 对象 | 添加元素 |
delete | boolean | 删除元素 |
has | boolean | weakset const obj1 = { name: "_island" }; const obj2 = { name: "QC2125" }; const obj3={ [obj1]:'a', [obj2]:'b', } console.log(obj3); // { '[object Object]': 'b' } Nach dem Login kopieren Nach dem Login kopieren |
const obj1 = { name: "_island" }; const obj2 = { name: "QC2125" }; const map = new Map(); map.set(obj1, "a"); map.set(obj2, "b"); console.log(map); // Map(2) { { name: '_island' } => 'a', { name: 'QC2125' } => 'b' } // or const map2 = new Map([[obj1,'a'],[obj2,'b']])
map2.forEach((item) => console.log(item));
defineProperty
im Objekt hinzuzufügen. 🎜for ([val, key] of map2) { console.log(`${key}---${val}`); }
const weakMap = new WeakMap(); weakMap.set(obj, "a"); console.log(weakMap.get(obj)); // a
symbol
kann nicht implizit in den Typ string
konvertiert werden. 🎜🎜🎜Hinweis: Der Parameter in der Symbolfunktion ist der Symboldeskriptor, was eine neue Funktion in ES10 ist🎜🎜rrreee🎜Wir können ein symbol
-Objekt nicht direkt alarmieren
, aber Wir können den Deskriptor des symbol
-Objekts über toString
oder .description
erhalten. 🎜rrreee🎜🎜Traversierungssymbol🎜🎜🎜Bei Verwendung von for
traversal und object.keys
kann der symbol
-Schlüssel für diesen< Code nicht abgerufen werden >object stellt außerdem die Methode getOwnPropertySymbols
bereit, mit der die Schlüssel aller Symbole im Objekt abgerufen werden. 🎜rrreee🎜🎜Globale Symbolobjektregistrierung🎜🎜🎜Manchmal müssen die Werte mehrerer symbol
konsistent sein. Wir können die von symbol< bereitgestellte statische Methode <code> übergeben /code> Die for
-Methode übergibt denselben Deskriptor, um ihre Werte konsistent zu machen. 🎜🎜🎜Symbol.for🎜🎜🎜Diese Methode durchsucht die Laufzeitsymbolregistrierung mithilfe des angegebenen Schlüssels nach einem vorhandenen Symbol und gibt es zurück, wenn es gefunden wird. Andernfalls wird mit diesem Schlüssel ein neues Symbol in der globalen Symbolregistrierung erstellt. 🎜rrreee🎜🎜Symbol.keyFor🎜🎜🎜Diese Methode wird verwendet, um den Deskriptor des globalen symbol
zu erhalten. 🎜rrreee🎜🎜🎜2, Set🎜🎜🎜🎜Set
-Objekt (ähnlich einem Array) ermöglicht das Speichern jedes Datentyps, aber die darin enthaltenen Werte können nicht wiederholt werden. 🎜rrreee🎜🎜Gemeinsame Methoden festlegen🎜🎜Methode | Rückgabewert | Beschreibung | 🎜< /thead>|||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
size 🎜 | set Die Menge im Set-Objekt🎜 | Gibt die Menge im Set-Objekt zurück🎜 🎜 | |||||||||||||||||||||||||||||||||||||||||||
hinzufügen 🎜 | Objekt festlegen 🎜 | Element hinzufügen 🎜🎜 | |||||||||||||||||||||||||||||||||||||||||||
löschen 🎜 | boolean 🎜 | Element löschen 🎜🎜 | |||||||||||||||||||||||||||||||||||||||||||
hat 🎜 | boolean 🎜 | Existiert dieser Wert im Set -Objekt? 🎜🎜 | |||||||||||||||||||||||||||||||||||||||||||
clear 🎜 | Keine🎜 | Löschen Sie den Wert im Set Objekt🎜 🎜🎜🎜🎜🎜🎜3. WeakSet🎜🎜🎜🎜WeakSet ist eine weitere Datenstruktur, die Set ähnelt, und die internen Daten können keine doppelten Werte haben . 🎜
|