Rumah > Artikel > hujung hadapan web > Apakah struktur data es6 baharu?
Struktur baharu ialah: 1. Simbol, yang mewakili nilai unik dan merupakan struktur fungsi 2. Set, yang merujuk kepada struktur "set", serupa dengan tatasusunan, membenarkan penyimpanan tidak tertib dan data tidak berulang; 3. WeakSet adalah serupa dengan Set, dan data dalaman tidak boleh mempunyai nilai pendua;
Persekitaran pengendalian tutorial ini: sistem Windows 7, ECMAScript versi 6, komputer Dell G3.
1 Simbol
Symbol
ialah yang baharu dalam ES6
Salah satu. jenis data asas, ia adalah fungsi. Setiap nilai Symbol
yang dikembalikan daripada fungsi Symbol
adalah unik Nilai symbol
berfungsi sebagai pengecam atribut objek dan mempunyai satu-satunya tujuan.
const s1 = Symbol() const s2 = Symbol() console.log(s1 === s2); // false
simbol sebagai kunci
Cara pertama ialah menambahkannya terus dalam literal objek.
// symbol作为key const obj = { [s1]:'abc', [s2]:'cc', }
Cara kedua ialah menambahnya dengan menambah tatasusunan.
// 需要用数组方式来获取,不能通过点语法,否则会获取到字符串key console.log(obj[s1]);
Cara ketiga ialah menambahkannya melalui kaedah defineProperty
dalam objek.
const s4=Symbol() Object.defineProperty(obj,s4,{ configurable:true, enumerable:true, writable:true, value:'ff' })
Dapatkan nilai yang sepadan melalui simbol
perlu diperolehi dalam mod tatasusunan, bukan melalui sintaks titik, jika tidak, kunci rentetan akan diperolehi.
console.log(obj[s1]);
symbol
tidak boleh ditukar secara tersirat kepada menaip string
.
Nota: Parameter dalam fungsi Simbol ialah deskriptor simbol, yang merupakan ciri baharu dalam ES10
let Sym = Symbol("Sym") alert(Sym) // TypeError: Cannot convert a Symbol value to a string
Kami tidak boleh terus alert
asymbol
objek, tetapi kita boleh mendapatkan deskriptor objek toString
melalui .description
atau symbol
.
let sym = Symbol('a') console.log(sym.description); // 'a'
simbol traversal
tidak boleh mendapatkan kunci for
apabila menggunakan object.keys
traversal atau symbol
Berkenaan dengan ini, object
masih getOwnPropertySymbols
kaedah disediakan untuk mendapatkan kunci semua simbol dalam objek.
const sKeys=(Object.getOwnPropertySymbols(obj)); for(const skey of sKeys){ console.log(obj[skey]); }
Pendaftaran objek simbol global
Kadangkala, kita mungkin memerlukan nilai berbilang symbol
untuk konsisten, kita boleh lulus statik yang disediakan oleh symbol
Kaedah for
lulus dalam deskriptor yang sama untuk menjadikan nilainya konsisten.
Symbol.for
Kaedah ini mencari pendaftaran simbol masa jalan untuk simbol sedia ada menggunakan kekunci yang diberikan dan mengembalikannya jika ditemui. Jika tidak, simbol baharu dicipta dalam pendaftaran simbol global menggunakan kekunci ini.
const sa=Symbol.for('cc') const sb=Symbol.for('cc') console.log(sa===sb); //true
Symbol.keyFor
Kaedah ini digunakan untuk mendapatkan deskriptor global symbol
.
const key =Symbol.keyFor(sb) console.log(key); // c
2. Set
Set
objek (serupa dengan tatasusunan) membenarkan anda menyimpan sebarang jenis data, tetapi nilainya dalam tidak boleh berulang.
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 }
Tetapkan kaedah biasa
Kaedah | Nilai pulangan th> | Penerangan | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
saiz |
set Kuantiti dalam objek |
Mengembalikan kuantiti dalam objek yang ditetapkan | ||||||||||||||||||
tambah |
|
Tambah elemen | ||||||||||||||||||
padam |
boolean td> |
Padam elemen | ||||||||||||||||||
mempunyai |
boolean |
Sama ada nilai ini wujud dalam objek |
||||||||||||||||||
clear |
None | Clearobjek Nilai dalam |
WeakSet
Set
Set
WeakSet
WeakSet
Penggunaan asas
const weakSet = new WeakSet(); let obj = { name: "_island" }; weakSet.add(obj);
WeakSet kaedah biasa
方法 | 返回值 | 说明 |
---|---|---|
add |
weakset 对象 |
添加元素 |
delete |
boolean |
删除元素 |
has |
boolean |
weakset 对象中是否存在这个值 |
关于遍历
WeakSet
不能被遍历,因为它只是对对象进行弱引用,如果遍历去获取元素,有可能导致对象不能被GC
回收。
所以WeakSet
中的对象是不能获取的
4、Map
ES6
新增的数据结构,用于存储映射关系。我们知道在JavaScript
中对象中是不能用对象来作为key
的。(假如我们把对象作为key
,其内部会将对象转换为字符串[object object]
)
const obj1 = { name: "_island" }; const obj2 = { name: "QC2125" }; const obj3={ [obj1]:'a', [obj2]:'b', } console.log(obj3); // { '[object Object]': 'b' }
而Map
则可以把对象作为key
进行存储,可以通过set
方法添加到Map
中,也直接通过字面量的方式添加。
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']])
Map常用方法
方法 | 返回值 | 说明 |
---|---|---|
get |
获取对应的元素 | 通过key 获取对应元素 |
size |
Map 对象中的数量 |
返回Map 对象中的数量 |
set |
Map 对象 |
添加元素 |
delete |
boolean |
删除元素 |
has |
boolean |
Set 对象中是否存在这个值 |
clear |
无 | 清空Set 对象中的值 |
遍历Map
通过foreach
语句遍历Map
map2.forEach((item) => console.log(item));
通过for..of
遍历Map
for ([val, key] of map2) { console.log(`${key}---${val}`); }
5、WeakMap
和Map
类似,也是以键值对的形式存在的
WeakMap
的key
只能使用对象,不接受其他的类型作为key
WeakMap
的key
对对象是弱引用基本使用
const weakMap = new WeakMap(); weakMap.set(obj, "a"); console.log(weakMap.get(obj)); // a
WeakMap常用方法
方法 | 返回值 | 说明 |
---|---|---|
get |
weakmap 对象 |
获取元素 |
delete |
boolean |
删除元素 |
has |
boolean |
weaksmap 对象中是否存在这个值 |
关于遍历
和WeakSet
一样,正因为它是弱引用,WeakMap
的key
是不可枚举的,如果key
可枚举那其列表将会受GC
影响。
【相关推荐:javascript视频教程、web前端】
Atas ialah kandungan terperinci Apakah struktur data es6 baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!