Beaucoup utilisent les implémentations de secours MDC (par exemple pour indexOf ). Ils sont généralement rigoureusement conformes aux normes, même au point de vérifier explicitement les types de tous les arguments.
Malheureusement, s'il est clair que les auteurs considèrent ce code comme trivial et librement utilisable, il ne semble pas y avoir de licence explicite pour le mettre par écrit. Le wiki dans son ensemble est CC Attribution-ShareAlike, si c'est une licence acceptable (bien que CC ne soit pas conçu pour le code en tant que tel).
js-methods semble correct en général, mais n'est pas aussi conforme aux normes sur les bords de la façon dont les fonctions sont supposées être (par exemple, des éléments de liste non définis, des fonctions qui mutent la liste). Il est également plein d'autres méthodes aléatoires non standard, y compris des méthodes douteuses comme le stripTags douteux et le codec UTF-8 incomplet (ce qui est également un peu inutile étant donné l' unescape(encodeURIComponent)
astuce).
Pour ce que ça vaut, voici ce que j'utilise (que je publie par la présente dans le domaine public, si on peut dire que c'est sous copyright). C'est un peu plus court que les versions MDC car il n'essaie pas de renifler le type que vous n'avez pas fait quelque chose de stupide comme passer des rappels sans fonction ou des index non entiers, mais à part cela, il tente d'être conforme aux normes. (Faites-moi savoir si j'ai manqué quelque chose. ;-))
'use strict';
// Add ECMA262-5 method binding if not supported natively
//
if (!('bind' in Function.prototype)) {
Function.prototype.bind= function(owner) {
var that= this;
if (arguments.length<=1) {
return function() {
return that.apply(owner, arguments);
};
} else {
var args= Array.prototype.slice.call(arguments, 1);
return function() {
return that.apply(owner, arguments.length===0? args : args.concat(Array.prototype.slice.call(arguments)));
};
}
};
}
// Add ECMA262-5 string trim if not supported natively
//
if (!('trim' in String.prototype)) {
String.prototype.trim= function() {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
}
// Add ECMA262-5 Array methods if not supported natively
//
if (!('indexOf' in Array.prototype)) {
Array.prototype.indexOf= function(find, i /*opt*/) {
if (i===undefined) i= 0;
if (i<0) i+= this.length;
if (i<0) i= 0;
for (var n= this.length; i<n; i++)
if (i in this && this[i]===find)
return i;
return -1;
};
}
if (!('lastIndexOf' in Array.prototype)) {
Array.prototype.lastIndexOf= function(find, i /*opt*/) {
if (i===undefined) i= this.length-1;
if (i<0) i+= this.length;
if (i>this.length-1) i= this.length-1;
for (i++; i-->0;) /* i++ because from-argument is sadly inclusive */
if (i in this && this[i]===find)
return i;
return -1;
};
}
if (!('forEach' in Array.prototype)) {
Array.prototype.forEach= function(action, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
action.call(that, this[i], i, this);
};
}
if (!('map' in Array.prototype)) {
Array.prototype.map= function(mapper, that /*opt*/) {
var other= new Array(this.length);
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
other[i]= mapper.call(that, this[i], i, this);
return other;
};
}
if (!('filter' in Array.prototype)) {
Array.prototype.filter= function(filter, that /*opt*/) {
var other= [], v;
for (var i=0, n= this.length; i<n; i++)
if (i in this && filter.call(that, v= this[i], i, this))
other.push(v);
return other;
};
}
if (!('every' in Array.prototype)) {
Array.prototype.every= function(tester, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this && !tester.call(that, this[i], i, this))
return false;
return true;
};
}
if (!('some' in Array.prototype)) {
Array.prototype.some= function(tester, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this && tester.call(that, this[i], i, this))
return true;
return false;
};
}
D'autres méthodes ECMA262-5 non implémentées ici incluent Array reduce
/ reduceRight
, les Object
méthodes JSON et les quelques nouvelles méthodes qui peuvent être implémentées de manière fiable en tant que fonctions JS.