


Operasi tugasan hanya berkuatkuasa apabila batal atau tidak ditentukan di sebelah kiri, 1. Digunakan untuk menetapkan nilai konfigurasi lalai, seperti user.age ?? = 18; 2. Melaksanakan inisialisasi malas pembolehubah, seperti cache? 3. Kekalkan nilai yang sah apabila menggabungkan sifat objek pilihan, seperti userData.email ?? = getDefaultEmail (); Pengendali ini tidak akan menimpa nilai -nilai palsu seperti 0, '' atau palsu, yang lebih selamat daripada || =, dan sesuai untuk persekitaran moden, akhirnya menjadikan kod lebih ringkas, selamat dan boleh diramal.
Pengendali tugasan coalescing null ( ??=
) adalah ciri ringkas dan berkuasa yang diperkenalkan dalam JavaScript moden (ES2021) yang membantu menyelaraskan tugasan bersyarat berdasarkan pemeriksaan null
atau undefined
. Ia amat berguna apabila anda ingin memberikan nilai lalai kepada pembolehubah hanya jika ia kini null
atau undefined
.

Apa ??=
sebenarnya
Operator ??=
berfungsi seperti ini:
A ?? = B;
Ini bermaksud:
"Jika a
adalah null
atau undefined
, berikan b
ke a
Jika tidak, biarkan a
berubah."

Ia bersamaan dengan menulis:
jika (a == null) { A = B; }
Tetapi lebih padat dan boleh dibaca.

?
null
??=
undefined
0
''
false
Bilakah hendak menggunakan ??=
1. Menetapkan nilai konfigurasi lalai
Apabila bekerja dengan pilihan pengguna yang disediakan, anda sering ingin mengisi mungkir hanya apabila sifat-sifat tertentu hilang.
fungsi createUser (tetapan) { const user = {}; user.name = settings.name ?? 'Anonymous'; user.age ?? = settings.age ?? 18; user.isactive ?? = Settings.Isactive ?? Benar; Pengguna pulangan; }
Atau lebih bersih:
fungsi createUser (tetapan) { const user = {name: 'anonymous', umur: 18, isactive: true}; user.name ?? = settings.name; user.age ?? = settings.age; user.isactive ?? = settings.isactive; Pengguna pulangan; }
Ini mengelakkan penindasan dengan undefined
semasa mengekalkan nilai -nilai palsu yang disengajakan.
2. Inisialisasi pembolehubah malas
Anda boleh menggunakan ??=
untuk memulakan nilai mahal atau bersyarat hanya apabila diperlukan.
biarkan cache; Cache? // berjalan sekali sahaja
Walaupun cache
ditugaskan semula untuk null
kemudian, corak ini membolehkan reinitialization - tidak seperti ||=
yang akan gagal pada hasil yang palsu.
?? Bandingkan dengan
||=
:
||=
Pencetus pada sebarang nilai palsu (0
,''
,false
, dan lain -lain), yang boleh menyebabkan pepijat.
??=
selamat kerana ia hanya mengambil berat tentangnull
danundefined
.
3. Bekerja dengan sifat objek pilihan
Apabila menggabungkan data separa, ??=
membantu mengekalkan keadaan sedia ada.
const userData = {id: 123, Nama: 'Alice'}; userData.email ?? = getDefaultEmail (userData.Name); userData.Role ?? = FetchDefaUltrole (); // async atau dikira
Ini mengelakkan secara tidak sengaja membersihkan rentetan yang sah tetapi kosong atau nilai false
.
Contoh Praktikal: Pengurus Konfigurasi
config kelas { pembina () { this.APikey = null; this.timeout = 0; this.retries = false; } applyDefaults () { this.APIKEY ?? = process.env.api_key; this.timeout ?? = 5000; this.retries ?? = 3; } }
Di sini:
-
timeout
adalah0
→ disimpan sebagai0
(tidak diganti) -
retries
adalahfalse
→ tetapfalse
- Hanya nilai yang benar -benar hilang (
null
) mendapat mungkir
Tingkah laku ini ??=
sesuai untuk sistem konfigurasi.
Batasan dan gotchas
- Tidak terdapat dalam persekitaran yang lebih tua - memerlukan ES2021 (Node.js 16, pelayar moden). Gunakan babel atau cek dalam kod warisan.
- Tidak boleh digunakan secara langsung pada pemusnahan objek seperti param lalai, tetapi aplikasi logik yang serupa:
// Destructuring dengan lalai masih menggunakan `=`, bukan `?? =` const {name = 'default'} = obj; // tetapi anda boleh lakukan: Let {Apikey} = obj; Apikey ?? = 'Fallback-Key';
- Perkara-perkara litar pintas : sebelah kanan dinilai hanya jika kiri adalah
null
/undefined
.
biarkan x = 1; x ?? = console.log ('ini tidak akan berjalan'); // tiada output
Ringkasan
Gunakan ??=
Bila:
- Anda mahu memberikan mungkir hanya untuk
null
/undefined
- Anda perlu mengekalkan nilai palsu seperti
0
,''
, ataufalse
- Anda melakukan permulaan malas atau menggabungkan data separa
Elakkan ||=
Dalam kes ini - ia terlalu luas.
Pada dasarnya:
??=
= "Hanya berikan jika benar -benar hilang"
||=
= "Berikan jika palsu" - sering terlalu agresif
Dengan ??=
, kod anda menjadi lebih bersih, lebih selamat, dan lebih diramalkan apabila mengendalikan nilai pilihan.
Atas ialah kandungan terperinci Memanfaatkan pengendali tugasan comelan null (`?? =`). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Menggunakan === bukan == adalah kunci untuk mengelakkan kesilapan penukaran jenis PHP, kerana == akan menyebabkan hasil yang tidak dijangka, dan === membandingkan nilai dan jenis pada masa yang sama untuk memastikan penghakiman yang tepat; Sebagai contoh, 0 == "palsu" adalah benar tetapi 0 === "palsu" adalah palsu, jadi apabila berurusan dengan nilai pulangan yang mungkin 0, rentetan kosong atau palsu, === harus digunakan untuk mencegah kesilapan logik.

Mengelakkan yang tidak dapat disangkal

Thenullcoalescingoperator (??) menyediakanConcisewayToassignDefaultValuesWendealingWithnullorundefined.1.itreturnstheleftoperandifitisnotnullorundefined;

Struktur kawalan alternatif PHP menggunakan kolon dan kata kunci seperti endif dan endfor dan bukannya pendakap keriting, yang dapat meningkatkan kebolehbacaan HTML campuran. 1. Jika-Elseif-Else bermula dengan kolon dan berakhir dengan endif, menjadikan blok keadaan lebih jelas; 2. 3. Untuk dan sementara jarang digunakan, mereka juga disokong. Sintaks ini mempunyai kelebihan yang jelas dalam pandangan fail: mengurangkan kesilapan sintaks, meningkatkan kebolehbacaan, dan sama dengan struktur tag HTML. Tetapi pendakap keriting harus terus digunakan dalam fail PHP tulen untuk mengelakkan kekeliruan. Oleh itu, sintaks alternatif disyorkan dalam templat yang menggabungkan PHP dan HTML untuk meningkatkan pemeliharaan kod.

SentiasaEstrictequality (=== dan! ==) InjavaScriptToavoidunExpectedBehaviorFromTypecoercion.1.Looseequaly (==) canleadtocounteriniteresultsbecauseitperformStypeConversion,

Useguardclausestoreturnearlyandflattenstructure.2.ExtractComplexconditionsintodescriptiveFuntionsorvariablesforclarityandreuse.3.ReplaceMultiPleconditionconditionswithalookuptableorstrategypatterntocentninatmin

Kadang -kadang ia akan menjejaskan prestasi, bergantung kepada bahasa, pengoptimuman pengkompil dan struktur logik; 1. Jika pernyataan dilaksanakan dengan teratur, dan kerumitan masa kes terburuk adalah O (n), keadaan yang paling mungkin harus diletakkan terlebih dahulu; 2. Pernyataan Switch boleh dioptimumkan oleh pengkompil ke jadual lompat O (1) apabila syarat -syarat adalah bilangan bulat yang berterusan, banyak cawangan dan nilai -nilai yang dikumpulkan pemalar; 3. Apabila pembolehubah tunggal dibandingkan dengan berbilang bilangan bulat malar dan terdapat banyak cawangan dan suis lebih cepat; 4. Apabila ia melibatkan penghakiman skop, keadaan kompleks, jenis bukan integer atau cawangan yang lebih sedikit, jika jika lebih sesuai atau mempunyai prestasi yang sama; 5. Bahasa yang berbeza (seperti C/C, Java, JavaScript, C#) mempunyai tahap pengoptimuman yang berbeza dari suis, dan mereka perlu diuji dalam kombinasi dengan ujian sebenar; SWI mesti digunakan terlebih dahulu

Gunakan && toskipexpensiveoperationsandguardagagainstnull/undefinedbyshort-circuitingonfalsyvalues;
