Rumah > Soal Jawab > teks badan
Saya cuba mengemas kini kod saya kepada ES6 kerana saya menggunakan Node 4.0 dan sangat menyukai cirinya setakat ini. Namun, saya rasa berbeza dengan ES6 baharu Map
数据结构有问题,因为当使用 Array
作为键时,它的行为与 {}
. Saya menggunakannya sebagai peta kaunter.
Saya menjalankan kod ini dan saya ingin tahu cara menggunakan tatasusunan sebagai kunci untuk Map
.
"use strict"; var a = new Map(); a.set(['x','y'], 1); console.log(a.get(['x','y'])); var b = {}; b[['x','y']] = 1; console.log(b[['x','y']]);
Ia mencetak perkara berikut, baris pertama hendaklah 1
而不是 undefined
:
undefined 1
Peta JS asal menyelaraskan kekunci dan saya tidak mahu melakukan jenis penggodaman stringifikasi yang sama dengan ES6 baharu Map
.
Bagaimanakah saya boleh menggunakan tatasusunan sebagai kunci dalam ES6 Map
?
P粉5292450502023-10-22 13:33:57
Anda perlu menyimpan rujukan kepada contoh bukan primitif Array
digunakan sebagai kunci. Sila ambil perhatian perbezaan dalam dua contoh berikut:
"use strict"; var a = new Map(); a.set(['x','y'], 1); console.log(a.get(['x','y'])); console.log(['x','y'] === ['x','y']); var b = new Map(); var array = ['x','y']; b.set(array, 1); console.log(b.get(array)); console.log(array === array);
P粉9785510812023-10-22 11:23:32
Fahami cara kekunci Peta ES2015 membandingkan (hampir) seperti ===
运算符一样。两个数组实例,即使它们包含相同的值,也不会以 ===
antara satu sama lain.
Cuba ini:
var a = new Map(), key = ['x', 'y']; a.set(key, 1); console.log(a.get(key));
Memandangkan kelas Map bertujuan untuk digunakan sebagai kelas asas, anda mungkin boleh menggunakan fungsi .get()
overridden untuk melaksanakan subkelas.
("hampir" dalam ayat pertama menggambarkan bahawa perbandingan kesamaan utama Peta dilakukan melalui Object.is()
, yang jarang berlaku dalam pengekodan harian. Pada asasnya, varian ketiga ujian kesaksamaan dalam JavaScript.)