Je me demande pourquoi les frameworks / bibliothèques ont leurs propres assistants alors qu'ils existent déjà en natif.
Prenons jQuery et AngularJS . Ils ont leurs propres each
fonctions d'itérateur:
Mais nous avons Array.prototype.forEach
.
De même,
Mais nous avons la JSON.parse()
fonction en JavaScript vanille.
javascript
libraries
web-framework
Cihad Turhan
la source
la source
jQuery.each
etArray.prototype.forEach
ne sont pas équivalents.$.each
, et ne pas utiliser le natif (et plus rapidement)Array.prototype.forEach
?Réponses:
Parce que, lorsque ces bibliothèques ont été écrites, certains des principaux navigateurs ne supportaient pas ces fonctionnalités. Une fois écrites et utilisées, ces fonctionnalités ne peuvent pas être supprimées de ces bibliothèques sans interrompre de nombreuses applications.
(Dans ce cas, "navigateur principal" signifie un navigateur qui détient toujours une part de marché importante, y compris d'anciennes versions de navigateurs tels qu'Internet Explorer, où un grand nombre d'utilisateurs ne passe pas nécessairement à la dernière version.)
la source
Array.prototype.forEach
itère uniquement sur des tableaux - les deux fonctions d'itérateur de bibliothèque peuvent parcourir des tableaux ou des objets.Parce que différents navigateurs ont différentes implémentations et fonctionnalités intégrées dans leur moteur JavaScript. Le même code "vanilla-JS" peut s'exécuter différemment sur deux navigateurs différents, voire même sur deux versions différentes du même navigateur.
La couche d'abstraction fournie par les bibliothèques JS populaires est un moyen de contourner ce problème. En coulisse, il s’appuie sur les capacités et les limites des différents navigateurs et offre une API unifiée et facile à utiliser. Ceci, à son tour, permet aux opérations courantes telles que l’obtention d’un objet DOM ou l’extraction de données JSON d’être cohérentes, efficaces et indépendantes du navigateur.
Cela facilite beaucoup la vie des développeurs qui peuvent désormais se concentrer sur ce que le code doit faire, plutôt que sur la manière dont il devrait être écrit pour fonctionner avec le navigateur X ou Y.
la source
Array.prototype.forEach
etJSON.parse
, une recherche rapide sur Google vous montrera que vous vous trompez.JSON
L'objet n'était pas pris en charge sur IE7 etforEach
n'était pas défini sur certaines versions d'Opera. Des bibliothèques telles que jQuery étaient toutefois au courant de ces limitations et les contournaient dans les coulisses. Je pense donc que ma réponse est valable.1. Compatibilité descendante
JavaScript est une implémentation de ECMAScript . La plupart de ces fonctions ont été introduites dans ECMAScript 5 (ES5). Cependant, de nombreux navigateurs plus anciens, qui possèdent encore une part assez importante du marché, ne prennent pas en charge ces fonctions (voir tableau de compatibilité ECMAScript 5 ), le plus notable étant IE8.
Généralement, les bibliothèques reviendront à l'implémentation native si elle existe, sinon elles utiliseront leur propre polyfill, par exemple, implémentons AngularJS ( angular.js L203-257 ):
Les lignes suivantes vérifient si la
forEach
méthode existe sur l’objet et s’il s’agit de la version AngularJS ou non. Sinon, il utilise la fonction déjà spécifiée (la version native):2. Commodité
En JavaScript natif,
Array.prototype.forEach
cette méthode est exclusive à une instance deArray
. Toutefois, la plupart desObject
modifications sont également itérables.Pour cette raison, de nombreux créateurs de bibliothèques rendent leurs fonctions polymorphes (pouvant accepter plusieurs types en entrée). Prenons le code AngularJS ci-dessus et voyons quelles entrées il accepte:
Fonctions :
Tableaux (avec support natif pour chaque):
Objets de type tableau, y compris Array (sans support natif de forEach), String, HTMLElement, Object avec une propriété de longueur valide:
Objets:
Conclusion
Comme vous pouvez le constater, AngularJS itérera sur la plupart des objets JavaScript, bien que fonctionnant de la même manière que la fonction native, il accepte beaucoup plus de types d’entrées et constitue donc un ajout valable à la bibliothèque ainsi qu’un moyen d’apporter des fonctions ES5. aux anciens navigateurs.
la source
master
modifié.