Objek boleh ubah
Dalam JavaScript, objek adalah data jenis rujukan Kelebihannya ialah apabila objek sering diubah suai, ia diubah suai berdasarkan objek asal dan tidak perlu dicipta semula Ini boleh menggunakan memori dengan berkesan dan tidak akan menyebabkan pembaziran memori ruang. Objek Ciri ini boleh dipanggil Mutable, yang bermaksud "pembolehubah" dalam bahasa Cina.
Untuk objek boleh ubah, kelebihannya sebagai fleksibel dan boleh diubah kadangkala menjadi kelemahannya Lebih fleksibel dan boleh diubah, lebih sukar untuk dikawal Untuk objek dengan struktur yang kompleks, ia mungkin diubah suai secara tidak sengaja di suatu tempat. jika objek digunakan dalam berbilang skop, sukar untuk meramalkan sama ada dan bila data akan berubah.
var obj = { /* 一个复杂结构的对象 */ }; doSomething(obj); // 上面的函数之行完后,此时的 obj 还是最初的那个 obj 吗?
Untuk menangani masalah ini, penyelesaian konvensional ialah menyalin objek ke objek baharu dalam bentuk salinan dalam, dan kemudian melakukan operasi pengubahsuaian pada objek baharu Ini boleh memastikan kebolehkawalan data, tetapi Penyalinan yang kerap boleh menyebabkan banyak pembaziran ruang ingatan.
var obj = { /* 一个复杂结构的对象 */ }; // copy 出一个新的 obj2 // 但是 copy 操作会浪费内存空间 var obj2 = deepClone(obj); doSomething(obj2); // 上面的函数之行完后,无论 obj2 是否变化,obj 肯定还是原来那个 obj
Objek tidak berubah
Untuk menyelesaikan masalah di atas dengan lebih baik, objek Kekal muncul secara literal diterjemahkan ke dalam bahasa Cina sebagai "tidak berubah". Setiap kali objek tidak berubah diubah suai, objek tidak berubah baharu dicipta dan operasi pada objek baharu tidak akan menjejaskan data objek asal. Objek istimewa ini bukanlah ciri baharu JavaScript, tetapi satu set penyelesaian yang disediakan oleh industri untuk menyelesaikan masalah ini, dan beberapa perpustakaan sumber terbuka yang sangat baik telah muncul, yang paling terkenal ialah sumber terbuka Lee Byron Facebook tidak berubah. js. Sudah tentu, penyelesaian Immutable tidak asli, tetapi datang dari Clojure dan Scala.
Perbandingan prestasi antara Boleh Berubah dan Tidak Berubah
Operasi yang tidak cekap pada objek Boleh Berubah terutamanya dicerminkan dalam penyalinan dan perbandingan, dan objek Tidak Boleh ubah menyelesaikan dua titik kesakitan yang tidak cekap ini.
Operasi penyalinan mendalam bagi objek Boleh Ubah biasa akan menyalin keseluruhan data, tetapi objek Tidak Boleh ubah tidak akan menyalin keseluruhan data apabila mengubah suai data, tetapi akan memindahkan hubungan ibu bapa-anak antara nod yang diubah dan nod yang tidak berubah nod, struktur yang serupa dengan senarai terpaut. Dari perspektif "menyalin", penyalinan minimum dicapai, dan bahagian yang tidak berubah dikongsi "jumlah penuh", manakala salinan tidak berubah "kenaikan" Mengenai penggunaan ruang memori Penghakiman akan dibuat berdasarkan perbandingan kadar.
Dan berdasarkan ciri bahawa objek Tidak Berubah baharu dicipta setiap kali objek Tidak Berubah diubah suai, status pengubahsuaian data boleh disimpan sebagai satu set syot kilat, yang juga sangat mudah.
Mari bercakap tentang operasi perbandingan. Untuk objek Boleh ubah, jika anda ingin membandingkan sama ada dua objek adalah sama, anda mesti melintasi setiap nod objek untuk perbandingan Untuk objek dengan struktur yang kompleks, kecekapan pastinya tidak jauh lebih tinggi. Untuk objek tidak boleh ubah, immutable.js menyediakan API untuk menentukan secara langsung sama ada "nilai" dua objek tidak berubah adalah sama.
var map1 = Immutable.Map({a:1, b:1, c:1}); var map2 = Immutable.Map({a:1, b:1, c:1}); assert(map1 !== map2); // 不同的 Immutable 实例,此时比较的是引用地址 assert(Immutable.is(map1, map2)); // map1 和 map2 的值相等,比较的是值 assert(map1.equals(map2)); // 与 Immutable.is 的作用一样
Dalam aplikasi pembangunan sebenar, prestasi tidak selalunya yang paling kritikal dan penting Untuk projek JavaScript biasa, kebolehkawalan data yang dibawa oleh ciri-ciri Immutable adalah lebih berfaedah daripada prestasi , Objek boleh ubah sesuai untuk digunakan dalam julat yang kecil daripada skop tertutup, manakala objek tidak boleh ubah sesuai untuk digunakan apabila data perlu dihantar merentasi berbilang skop.
Perbezaan penggunaan antara Mutable dan Immutable
immutable.js menyediakan pelbagai struktur data tidak boleh ubah: termasuk Senarai Stack Map OrderedMap Set OrderedSet Record Struktur data ini secara kasarnya sepadan dengan struktur data Mutable asli.
Penggunaan setiap struktur data tidak akan diterangkan secara terperinci di sini Mari kita bincangkan tentang perbezaan penggunaan antara objek Tidak boleh ubah dan objek Boleh Berubah.
Objek Mutable Asli sangat mudah untuk "membaca" dan "menulis".
var mutableObj = {}; // 写入数据 mutableObj.foo = 'bar'; // 读取数据 console.log(mutableObj.foo);
Objek Tidak boleh ubah perlu "membaca" dan "menulis" data melalui set dan dapatkan.
var immutableObj1 = Immutable.Map(); // 写入数据 var immutableObj2 = immutableObj1.set('foo', 'bar'); // 读取数据 console.log(immutableObj2.get('foo')); // => 'bar'
Contoh di atas hanya mencipta objek kosong pada permulaan untuk menggambarkan penggunaan kaedah set Malah, nilai awal boleh dihantar semasa instantiasi.
var immutableObj = Immutable.Map({'foo', 'bar'});
Untuk data peringkat dalam, antara muka akses yang disediakan oleh immutable.js adalah sangat mudah.
var immutableObj1 = Immutable.fromJS({ a: { b: 'c' }, d: [1, 2, 3] }); // 读取深层级的数据 console.log(immutableObj1.getIn(['a', 'b'])); // => 'c' console.log(immutableObj1.getIn(['d', 1])); // => 2 // 修改深层级的数据 var immutableObj2 = immutableObj1.setIn(['a', 'b'], 'd'); console.log(immutableObj2.getIn(['a', 'b'])); // => 'd'
Jika ia adalah objek Boleh ubah asli, ralat tidak ditentukan objek mungkin dilaporkan apabila merantai akses kepada data peringkat dalam Walau bagaimanapun, objek Tidak Boleh ubah tidak akan melaporkan ralat apabila menghadapi situasi ini dan mengembalikan tidak ditentukan.
Apabila menyahpepijat, jika anda ingin melihat struktur dalaman objek Tidak Boleh Ubah, adalah disyorkan untuk menggunakan toJSON() untuk menukarnya kepada objek Boleh Ubah biasa terlebih dahulu.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

Ya, teras enjin JavaScript ditulis dalam C. 1) Bahasa C menyediakan prestasi yang efisien dan kawalan asas, yang sesuai untuk pembangunan enjin JavaScript. 2) Mengambil enjin V8 sebagai contoh, terasnya ditulis dalam C, menggabungkan kecekapan dan ciri-ciri berorientasikan objek C. 3) Prinsip kerja enjin JavaScript termasuk parsing, penyusun dan pelaksanaan, dan bahasa C memainkan peranan penting dalam proses ini.

JavaScript adalah di tengah -tengah laman web moden kerana ia meningkatkan interaktiviti dan dinamik laman web. 1) Ia membolehkan untuk menukar kandungan tanpa menyegarkan halaman, 2) memanipulasi laman web melalui Domapi, 3) menyokong kesan interaktif kompleks seperti animasi dan drag-and-drop, 4) mengoptimumkan prestasi dan amalan terbaik untuk meningkatkan pengalaman pengguna.

C dan JavaScript mencapai interoperabilitas melalui webassembly. 1) Kod C disusun ke dalam modul WebAssembly dan diperkenalkan ke dalam persekitaran JavaScript untuk meningkatkan kuasa pengkomputeran. 2) Dalam pembangunan permainan, C mengendalikan enjin fizik dan rendering grafik, dan JavaScript bertanggungjawab untuk logik permainan dan antara muka pengguna.

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.


Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

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

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).
