Viele verwenden die MDC-Fallback-Implementierungen (z. B. für indexOf ). Sie sind im Allgemeinen streng standardkonform, selbst wenn die Typen aller Argumente explizit überprüft werden.
Obwohl es klar ist, dass die Autoren diesen Code als trivial und frei verwendbar betrachten, scheint es leider keine explizite Lizenzgewährung zu geben, um dies schriftlich niederzulegen. Das gesamte Wiki ist CC Attribution-ShareAlike, wenn dies eine akzeptable Lizenz ist (obwohl CC nicht für Code als solchen ausgelegt ist).
js-Methoden sehen im Allgemeinen in Ordnung aus, sind jedoch an den Rändern der Funktionen nicht so standardkonform (z. B. undefinierte Listenelemente, Funktionen, die die Liste mutieren). Es ist auch voll von anderen zufälligen nicht standardmäßigen Methoden, einschließlich einiger fragwürdiger Methoden wie den zwielichtigen stripTags und dem unvollständigen UTF-8-Codec (was angesichts des unescape(encodeURIComponent)
Tricks ebenfalls etwas unnötig ist ).
Für das, was es wert ist, verwende ich Folgendes (das ich hiermit öffentlich zugänglich mache, wenn man sagen kann, dass es überhaupt urheberrechtlich geschützt ist). Es ist etwas kürzer als die MDC-Versionen, da es nicht versucht, zu tippen, dass Sie nicht etwas Dummes getan haben, wie nicht funktionale Rückrufe oder nicht ganzzahlige Indizes zu übergeben, aber abgesehen davon versucht es, standardkonform zu sein. (Lass es mich wissen, wenn ich etwas verpasst habe. ;-))
'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;
};
}
Andere ECMA262-5-Methoden, die hier nicht implementiert sind, umfassen Array reduce
/ reduceRight
, die JSON- Object
Methoden und die wenigen neuen Methoden, die zuverlässig als JS-Funktionen implementiert werden können.