Fixation JavaScript les fonctions de Tableau dans Internet Explorer (indexOf, forEach, etc.)
Comme détaillé d'ailleurs, et sinon apparemment bien connu, Internet Explorer (certainement de la version 7, et dans certains cas, la version 8) ne pas mettre en œuvre les principales fonctions, en particulier sur Array
(comme forEach
, indexOf
, etc).
Il y a un certain nombre de solutions de contournement ici et là, mais j'aimerais à la fois un bon canonique ensemble d'implémentations dans notre site plutôt que de copier et de coller ou de bidouiller à nos propres implémentations. J'ai trouvé js-méthodes, qui a l'air prometteur, mais pensé que je poste ici, pour voir si une autre bibliothèque est de plus fortement recommandé. Un couple de divers critères:
- La bibliothèque devrait juste être un non-fonctionnement de ces fonctions que d'un navigateur a déjà des implémentations pour (
js-methods
semble très bien ici). - Non-GPL, s'il vous plaît, si LGPL est acceptable.
Vous devez vous connecter pour publier un commentaire.
Nombreux à utiliser le MDC de secours implémentations (eg. pour indexOf). Ils sont généralement rigoureusement conforme aux normes, à la limite même explicitement de vérifier les types de tous les arguments.
Malheureusement, alors qu'il est clair que les auteurs considèrent ce code comme trivial et librement utilisable, il ne semble pas être explicite d'une licence de subvention pour mettre cela par écrit. Le wiki est un tout CC Attribution-partage dans les mêmes conditions, si c'est une licence acceptable (si CC n'est pas conçu pour le code en tant que tel).
js-méthodes semble OK en général, mais n'est pas conforme aux normes sur les bords de la façon dont les fonctions sont censés être (eg. pas défini les éléments de la liste, les fonctions qui muter la liste). C'est aussi plein d'autres aléatoire de méthodes non normalisées, y compris quelques jeux comme les louches stripTags et l'incomplétude de l'UTF-8 codec (qui est aussi un peu inutile étant donné la
unescape(encodeURIComponent)
truc).Pour ce que ça vaut, voici ce que j'utilise (qui, je décharge dans le domaine public, si l'on peut dire à être soumis au droit d'auteur à tous). C'est un peu plus court que le MDC versions qu'il ne tente pas de type-sentir que vous n'avez pas fait quelque chose de stupide comme le pass de non-fonctionnement des rappels ou des non-index entiers, mais en dehors de cela, il tente d'être conformes aux normes en vigueur. (Laissez-moi savoir si j'ai raté quelque chose. ;-))
Autres ECMA262-5 méthodes qui ne sont pas mis en œuvre ici comprennent Array
reduce
/reduceRight
, le JSON et les quelques nouveauxObject
méthodes qui peuvent être mis en œuvre de manière fiable que JS fonctions.subItem[1]
? Il semble que vous êtes en train de faire unString#indexOf
, ce qui n'est pas affectée parArray#indexOf
ou quoi que ce soit d'autre ici.undefined
n'est pas vraiment un mot-clé. Vous devez utilisertypeof i === 'undefined'
.Function
,Array
,String
ou à l'un des builtin des objets aux propriétés du prototype. Vous ne pouvez jamais être complètement preuve contre le sabotage en JS, je fais le choix de ne pas laid en essayant.Prendre un coup d'oeil à Underscore.js.
Kris Kowal a compilé une petite bibliothèque qui agit comme une cale pour ECMAScript 5 fonctions qui peuvent être manquantes à partir du navigateur de mise en œuvre. Certaines fonctions ont été revus de nombreuses fois par d'autres personnes à être optimisé pour la vitesse et pour contourner navigateur de bugs. Les fonctions sont écrites à suivre le cahier des charges aussi étroitement que possible.
es5-shim.js a été publié sous la licence MIT, le Tableau.prototype extensions sont près du sommet et vous pouvez couper et enlever toutes les fonctions que vous n'avez pas besoin assez facilement. Je vous conseille aussi rapetisser le script que les commentaires qui font qu'il est beaucoup plus grand qu'il doit être.
Par "ne pas mettre en œuvre les principales fonctions vous avez réellement signifie" conforme à l'ECMA 262 3'rd ed " droit? 🙂
Les méthodes que vous faites référence à la 5 ième édition - pour les navigateurs ne supportant pas cela, vous pouvez utiliser le "cale" qui s'étend sur 3'rd en 5 ième
http://github.com/kriskowal/narwhal-lib/blob/narwhal-lib/lib/global-es5.js.
Ces scripts ne fonctionnent pas bien dans mes tests. J'ai créer un fichier avec les mêmes fonctions basées sur MDN documents.
Trop de problèmes zones sont résolus dans Internet Explorer 8. Voir le code dans egermano /ie-fix.js.
Avec l'Underscore.js
var arr=['a','a1','b']
_.filter(arr, function(a){ return a.indexOf('a') > -1; })