Saya bertanya-tanya mengapa kerangka kerja / perpustakaan memiliki pembantu mereka sendiri meskipun sudah ada secara native.
Mari kita ambil jQuery dan AngularJS . Mereka memiliki each
fungsi iterator sendiri :
Tapi kami punya Array.prototype.forEach
.
Demikian pula,
Tetapi kami memiliki JSON.parse()
fungsi dalam JavaScript vanilla.
javascript
libraries
web-framework
Cihad Turhan
sumber
sumber
jQuery.each
danArray.prototype.forEach
tidak setara.$.each
, dan tidak menggunakan yang asli (dan lebih cepat)Array.prototype.forEach
?Jawaban:
Karena ketika perpustakaan itu ditulis, beberapa browser utama tidak mendukung fitur-fitur itu. Setelah ditulis dan digunakan, fitur-fitur ini tidak dapat dihapus dari perpustakaan ini tanpa merusak banyak aplikasi.
(Dalam hal ini, "peramban utama" berarti peramban yang masih memiliki pangsa pasar yang besar, yang mencakup peramban versi lama seperti Internet Explorer, di mana sejumlah besar pengguna tidak perlu memutakhirkan ke versi terbaru.)
sumber
Array.prototype.forEach
iterates hanya melalui array - kedua fungsi perpustakaan iterator dapat beralih di atas array atau objek.Karena browser yang berbeda memiliki implementasi dan fitur yang berbeda dalam mesin JavaScript mereka. Kode "vanilla-JS" yang sama dapat berjalan secara berbeda pada dua browser yang berbeda, atau bahkan dua versi berbeda dari browser yang sama.
Lapisan abstraksi yang disediakan oleh perpustakaan JS populer adalah cara mengatasi ini. Di balik layar, ia bekerja di sekitar berbagai kapasitas dan batasan browser dan menawarkan API terpadu yang mudah digunakan. Ini, pada gilirannya, memungkinkan operasi umum seperti mendapatkan objek DOM atau mengambil data JSON menjadi konsisten, efisien dan agnostik browser.
Ini membuat hidup jauh lebih mudah bagi pengembang yang sekarang dapat fokus pada kode apa yang harus dilakukan, daripada bagaimana seharusnya ditulis untuk bekerja dengan browser X atau Y.
sumber
Array.prototype.forEach
danJSON.parse
fungsinya, pencarian cepat di Google akan menunjukkan bahwa Anda salah.JSON
objek tidak didukung pada IE7 danforEach
tidak didefinisikan pada beberapa versi Opera. Namun perpustakaan seperti jQuery tahu tentang keterbatasan ini dan bekerja di sekitar mereka di belakang layar. Jadi saya pikir jawaban saya benar.1. Kompatibilitas mundur
JavaScript adalah implementasi dari ECMAScript . Sebagian besar fungsi tersebut diperkenalkan dalam ECMAScript 5 (ES5) namun banyak browser lama yang masih memiliki pangsa pasar yang cukup signifikan tidak mendukung fungsi-fungsi ini (lihat tabel kompatibilitas ECMAScript 5 ), yang paling terkenal adalah IE8.
Umumnya perpustakaan akan kembali ke implementasi asli jika ada jika tidak menggunakan polyfill mereka sendiri, misalnya mari kita lihat implementasi AngularJS ( angular.js L203-257 ):
Baris berikut memeriksa apakah
forEach
metode ada pada objek dan apakah itu versi AngularJS atau tidak. Jika tidak menggunakan fungsi yang sudah ditentukan (versi asli):2. Kenyamanan
Dalam JavaScript asli
Array.prototype.forEach
adalah metode eksklusif untuk turunannyaArray
, namun sebagian besar jugaObject
dapat diubah.Karena alasan ini, banyak pembuat perpustakaan membuat fungsinya polimorfik (dapat menerima beberapa tipe sebagai input). Mari kita ambil kode AngularJS di atas dan lihat input apa yang diterima:
Fungsi :
Array (dengan dukungan native forEach):
Objek seperti array termasuk Array (tanpa dukungan forEach asli), String, HTMLElement, Obyek dengan properti panjang yang valid:
Benda:
Kesimpulan
Seperti yang Anda lihat, AngularJS akan beralih ke sebagian besar Objek JavaScript, meskipun ia bekerja dengan cara yang sama seperti fungsi asli, ia menerima jenis input yang jauh lebih berbeda dan karenanya merupakan tambahan yang valid ke perpustakaan serta cara membawa fungsi ES5 ke browser lawas.
sumber
master
perubahan.