Rumah >hujung hadapan web >tutorial js >Ketidakhadiran dalam JavaScript
Konsep Utama:
Memahami Immutability:
mutabiliti, hanya meletakkan, bermakna sesuatu adalah tertakluk kepada perubahan. Dalam pengaturcaraan, objek yang boleh berubah membolehkan perubahan kepada keadaan mereka. Ketidakhadiran adalah sebaliknya: nilai yang tidak berubah kekal tetap selepas penciptaan. Banyak nilai biasa tidak berubah. Contohnya:
<code class="language-javascript">const statement = "I am an immutable value"; const otherStr = statement.slice(8, 17); </code>adalah rentetan baru;
tetap tidak berubah. Kaedah rentetan membuat rentetan baru; Mereka tidak mengubah suai asal. Ini kerana rentetan tidak berubah. Nombor berkongsi ciri ini. otherStr
statement
rentetan dan nombor terbina dalam JavaScript tidak berubah. Walau bagaimanapun, tatasusunan boleh berubah:
<code class="language-javascript">let arr = []; let v2 = arr.push(2); // arr is modified; v2 holds the new length</code>akan berkelakuan berbeza:
ImmutableArray
<code class="language-javascript">const arr = new ImmutableArray([1, 2, 3, 4]); const v2 = arr.push(5); arr.toArray(); // [1, 2, 3, 4] v2.toArray(); // [1, 2, 3, 4, 5]</code>(menggantikan objek) akan mengembalikan objek baru apabila sifat "ditetapkan":
ImmutableMap
<code class="language-javascript">const person = new ImmutableMap({name: "Chris", age: 32}); const olderPerson = person.set("age", 33); person.toObject(); // {name: "Chris", age: 32} olderPerson.toObject(); // {name: "Chris", age: 33}</code>kebolehubahan dalam amalan (menggunakan immutable.js):
Oleh kerana JavaScript tidak mempunyai struktur yang tidak berubah asli, kami menggunakan perpustakaan seperti tidak dapat ditemui. Mari kita pertimbangkan contoh permainan yang lebih baik. Papan adalah peta yang tidak berubah, dengan
sebagai senarai peta yang tidak berubah (setiap jubin). Penggunaan Inisialisasi 'S tiles
Fungsi: immutable.js
fromJS
<code class="language-javascript">function createGame(options) { return Immutable.fromJS({ cols: options.cols, rows: options.rows, tiles: initTiles(options.rows, options.cols, options.mines) }); }</code>bendera jubin seperti yang dinyatakan. Dengan data yang boleh berubah:
revealTile
<code class="language-javascript">function revealTile(game, tile) { game.tiles[tile].isRevealed = true; //Direct mutation }</code>:
setIn
<code class="language-javascript">function revealTile(game, tile) { return game.setIn(['tiles', tile, 'isRevealed'], true); }</code>Mengembalikan contoh baru yang tidak berubah. Untuk keteguhan, kita boleh menyemak kewujudan jubin menggunakan
: setIn
getIn
<code class="language-javascript">function revealTile(game, tile) { return game.getIn(['tiles', tile]) ? game.setIn(['tiles', tile, 'isRevealed'], true) : game; }</code>Pertimbangan Prestasi:
Semasa membuat objek baru mungkin kelihatan tidak cekap, "perkongsian struktur" meminimumkan overhead ingatan. Impak prestasi sering lebih besar daripada manfaat kebolehubahan. Penjejakan perubahan yang lebih baik: Immutability memudahkan perubahan penjejakan dalam kerangka UI. Membandingkan rujukan ( Kesimpulan:
a === b
Atas ialah kandungan terperinci Ketidakhadiran dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!