새 구조는 다음과 같습니다. 1. 고유한 값을 나타내며 함수 구조인 기호 2. 배열과 유사한 "집합" 구조를 참조하여 순서가 없고 반복할 수 없는 데이터를 저장할 수 있는 집합 ; 3. WeakSet, Set과 유사하게 내부 데이터는 중복된 값을 가질 수 없습니다. 4. Map은 매핑 관계를 저장할 수 있는 "사전" 구조를 나타냅니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.
1. Symbol
Symbol
은 ES6
의 새로운 기본 데이터 유형 중 하나입니다. Symbol
함수에서 반환된 각 Symbol
값은 고유합니다. symbol
값은 객체 속성의 식별자 역할을 하며 유일한 목적을 갖습니다. 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' } 로그인 후 복사 로그인 후 복사 |
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
메소드를 통해 추가하는 것입니다. 🎜for ([val, key] of map2) { console.log(`${key}---${val}`); }
const weakMap = new WeakMap(); weakMap.set(obj, "a"); console.log(weakMap.get(obj)); // a
symbol
은 암시적으로 string
유형으로 변환될 수 없습니다. 🎜🎜🎜참고: Symbol 함수의 매개변수는 ES10🎜🎜rrreee🎜의 새로운 기능인 기호 설명자입니다. symbol
개체에 직접 alert
할 수는 없지만 toString
또는 .description
을 통해 symbol
개체의 설명자를 얻을 수 있습니다. 🎜rrreee🎜🎜Traversing Symbol🎜🎜🎜for
탐색 및 object.keys
를 사용할 때 symbol
키를 얻을 수 없습니다. >object는 또한 객체에 있는 모든 기호의 키를 얻는 데 사용되는 getOwnPropertySymbols
메서드를 제공합니다. 🎜rrreee🎜🎜전역 기호 개체 등록🎜🎜🎜때로는 일관성을 유지하기 위해 여러 symbol
의 값이 필요할 수 있습니다. symbol<에서 제공하는 정적 메서드 <code>를 전달할 수 있습니다. /code> for
메소드는 동일한 설명자를 전달하여 해당 값을 일관되게 만듭니다. 🎜🎜🎜Symbol.for🎜🎜🎜이 메서드는 지정된 키를 사용하여 런타임 기호 레지스트리에서 기존 기호를 검색하고 발견되면 반환합니다. 그렇지 않으면 이 키를 사용하여 전역 기호 레지스트리에 새 기호가 생성됩니다. 🎜rrreee🎜🎜Symbol.keyFor🎜🎜🎜이 메서드는 전역 symbol
의 설명자를 얻는 데 사용됩니다. 🎜rrreee🎜🎜🎜2, Set🎜🎜🎜🎜Set
객체(배열과 유사)를 사용하면 모든 데이터 유형을 저장할 수 있지만 내부 값은 반복될 수 없습니다. 🎜rrreee🎜🎜공통 메소드 설정🎜🎜메소드 | 반환 값 | 설명 | 🎜< /thead>|||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
size 🎜 | set 세트 개체의 수량🎜 | 세트 개체의 수량을 반환합니다🎜 🎜 | |||||||||||||||||||||||||||||||||||||||||||
추가 🎜 | 설정 개체 🎜 | 요소 추가 🎜🎜 | |||||||||||||||||||||||||||||||||||||||||||
삭제 🎜 | 부울 🎜 | 요소 삭제 🎜🎜 | |||||||||||||||||||||||||||||||||||||||||||
has 🎜 | boolean 🎜 | 이 값이 Set 개체에 있습니까? 🎜🎜 | |||||||||||||||||||||||||||||||||||||||||||
clear 🎜 | None🎜 | Set에서 값을 지웁니다. object🎜 🎜🎜🎜🎜🎜🎜3.WeakSet🎜🎜🎜🎜WeakSet 은 Set 과 유사한 또 다른 데이터 구조이며, 내부 데이터는 중복된 값을 가질 수 없습니다. . 🎜
|