Simbol Tipe data primitif baru yang mewakili keunikan. Ini adalah tipe data ketujuh dalam JavaScript. Enam metode lainnya adalah :
. Nilai simbol dihasilkan melalui fungsi Simbol. Ada dua tipe nama atribut objek, satu adalah string asli, dan yang lainnya adalah tipe Simbol baru . Nama atribut bertipe Simbol dan unik, sehingga memastikan tidak bertentangan dengan nama atribut lainnya.
biarkan s1=Simbol() biarkan s2=Simbol() konsol.log(s1) //Simbol() konsol.log(s2) //Simbol() konsol.log(s1===s2) //PALSU //Fungsi simbol dapat menerima string sebagai parameter, menunjukkan deskripsi instance Simbol let s1=Symbol('xxx') biarkan s2=Simbol('hhh') konsol.log(s1) //Simbol(xxx) konsol.log(s2) //Simbol(hhh) konsol.log(s1===s2) //falseAnda tidak dapat menggunakan perintah baru sebelum menyalin kode
fungsi Simbol, dan kesalahan akan dilaporkan. Hal ini karena Simbol yang dihasilkan adalah nilai tipe primitif, bukan objek. Artinya, karena nilai Simbol bukan objek, properti tidak dapat ditambahkan. Setara dengan string khusus.
Simbol.for() menerima string sebagai parameter, dan kemudian mencari nilai Simbol dengan parameter sebagai namanya. Jika ada, kembalikan nilai Simbol, jika tidak, buat nilai Simbol baru dengan string sebagai namanya dan daftarkan secara global.
misalkan s1 = Simbol.untuk('xxx') misalkan s2 = Simbol.untuk('xxx') konsol.log(s1 === s2) // benar fungsi foo(){ return Simbol.untuk('halo') } konstanta x=foo() const y=Simbol.untuk('halo') console.log(x === y)//true
Symbol.for() dan Symbol() akan menghasilkan Simbol baru. Perbedaannya adalah yang pertama akan terdaftar di lingkungan pencarian global, sedangkan yang kedua tidak. Symbol.for() tidak akan mengembalikan nilai tipe Simbol baru setiap kali dipanggil. Sebaliknya, ia akan memeriksa terlebih dahulu apakah kunci yang diberikan sudah ada, dan kemudian membuat nilai baru jika tidak ada.
Metode Symbol.keyFor() mengembalikan kunci dari nilai tipe Simbol yang terdaftar.
const s1 = Simbol('foo') console.log(Symbol.keyFor(s1)) // tidak terdefinisi const s2 = Simbol.untuk('foo')console.log(Symbol.keyFor(s2)) //
foo
. Karena nilai Simbol tidak sama, ini berarti nilai Simbol dapat digunakan sebagai pengidentifikasi dan digunakan dalam nama atribut objek untuk memastikan bahwa mereka tidak akan muncul Atribut dengan nama yang sama. Ini berguna ketika suatu objek terdiri dari beberapa modul, untuk mencegah kunci tertimpa atau tertimpa secara tidak sengaja.
nilai konstan ={ Zhang San:{alamat:'qqq',telp:'111'}, Li Si:{alamat:'aaa',telp:'222'}, Li Si:{alamat:'sss',telp:'333'}, } console.log(kelas) //Zhang San: {alamat: "qqq", telp: "111"} Li Si: {alamat: "sss", telp: "333"} //Nilai kunci dari objek tidak dapat diulang. Jika ada pengulangan, nilai nilai berikutnya akan menimpa nilai sebelumnya //Gunakan Simbol untuk menyelesaikan, yang setara dengan string unik const stu1=Symbol('李思') const stu2=Simbol('李思') konsol.log(stu1===stu2) //PALSU nilai konstan ={ [stu1]:{alamat:'aaa',telp:'222'}, [stu2]:{alamat:'sss',telp:'333'}, } console.log(kelas) //John Doe: {alamat:'sss',telp:'222'} John Doe: {alamat:'sss',telp:'333'} konsol.log(kelas[stu1]) //Li Si: {alamat:'sss',telp:'222'} konsol.log(kelas[stu2]) //Li Si: {alamat:'sss',telp:'333'}
const sym=Symbol('imooc') Pengguna kelas{ konstruktor(nama){ ini.nama=nama ini[sym]='imooc.com' } dapatkanNama(){ kembalikan ini.nama+ini[sym] } } const pengguna=Pengguna baru('www') //Metode for in tidak dapat melintasi atribut Simbol karena disembunyikan untuk (biarkan kunci masuk pengguna){ console.log(kunci)//nama } //Metode Objek.kunci(obj) tidak dapat melintasi properti Simbol untuk(biarkan kunci Objek.kunci(pengguna)){ console.log(kunci)//nama } //Object.getOwnPropertySymbols(obj) hanya bisa mendapatkan properti Simbol untuk(biarkan kunci Object.getOwnPropertySymbols(user)){ console.log(kunci)//Simbol(imooc) } //Properti objek Reflect.ownKeys(obj) dapat diperoleh untuk(biarkan kunci Reflect.ownKeys(pengguna)){ console.log(kunci) //nama //Simbol(imooc) }
String ajaib mengacu pada string atau nilai tertentu yang muncul beberapa kali dalam kode dan membentuk hubungan yang kuat dengan kode. Kode dengan gaya yang baik harus mencoba menghilangkan string ajaib dan menggantinya dengan variabel dengan arti yang jelas.
fungsi getArea(bentuk) { misalkan luas = 0 beralih (bentuk) { kasus 'Segitiga': luas=1 merusak kasus 'Lingkaran': luas=2 merusak } daerah kembali } console.log(getArea('Segitiga')) //Segitiga dan Lingkaran adalah string ajaib. Tampaknya berkali-kali, membentuk "hubungan yang kuat" dengan kode, yang tidak kondusif untuk modifikasi dan pemeliharaan selanjutnya. tipe bentuk const = { segitiga: Simbol(), lingkaran: Simbol() } fungsi getArea(bentuk) { misalkan luas = 0 beralih (bentuk) { tipe kasus bentuk.segitiga: luas=1 merusak tipe bentuk kasus.lingkaran: luas=2 merusak } daerah kembali } console.log(getArea(shapeType.triangle))
Saya seorang pemula front-end. Jika ada kesalahan dalam artikel, tolong beri saya saran dan diskusi!
[Rekomendasi tutorial video terkait: web front-end]
Di atas adalah detail isi pembelajaran tipe data JavaScript dan analisis singkat tipe Simbol. Untuk informasi lebih lanjut, harap perhatikan artikel terkait lainnya di situs web PHP Cina!