121 lines
3.0 KiB
JavaScript
121 lines
3.0 KiB
JavaScript
|
|
// ecma-5.js
|
|
//
|
|
// -- kriskowal Kris Kowal Copyright (C) 2009-2010 MIT License
|
|
// -- tlrobinson Tom Robinson
|
|
// dantman Daniel Friesen
|
|
|
|
//
|
|
// Array
|
|
//
|
|
if (!Array.isArray) {
|
|
Array.isArray = function(obj) {
|
|
return Object.prototype.toString.call(obj) === "[object Array]" ||
|
|
(obj instanceof Array);
|
|
};
|
|
}
|
|
if (!Array.prototype.forEach) {
|
|
Array.prototype.forEach = function(block, thisObject) {
|
|
var len = this.length >>> 0;
|
|
for (var i = 0; i < len; i++) {
|
|
if (i in this) {
|
|
block.call(thisObject, this[i], i, this);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
if (!Array.prototype.map) {
|
|
Array.prototype.map = function(fun /*, thisp*/) {
|
|
var len = this.length >>> 0;
|
|
var res = new Array(len);
|
|
var thisp = arguments[1];
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
if (i in this) {
|
|
res[i] = fun.call(thisp, this[i], i, this);
|
|
}
|
|
}
|
|
return res;
|
|
};
|
|
}
|
|
if (!Array.prototype.filter) {
|
|
Array.prototype.filter = function (block /*, thisp */) {
|
|
var values = [];
|
|
var thisp = arguments[1];
|
|
for (var i = 0; i < this.length; i++) {
|
|
if (block.call(thisp, this[i])) {
|
|
values.push(this[i]);
|
|
}
|
|
}
|
|
return values;
|
|
};
|
|
}
|
|
if (!Array.prototype.reduce) {
|
|
Array.prototype.reduce = function(fun /*, initial*/) {
|
|
var len = this.length >>> 0;
|
|
var i = 0;
|
|
|
|
// no value to return if no initial value and an empty array
|
|
if (len === 0 && arguments.length === 1) throw new TypeError();
|
|
|
|
if (arguments.length >= 2) {
|
|
var rv = arguments[1];
|
|
} else {
|
|
do {
|
|
if (i in this) {
|
|
rv = this[i++];
|
|
break;
|
|
}
|
|
// if array contains no values, no initial value to return
|
|
if (++i >= len) throw new TypeError();
|
|
} while (true);
|
|
}
|
|
for (; i < len; i++) {
|
|
if (i in this) {
|
|
rv = fun.call(null, rv, this[i], i, this);
|
|
}
|
|
}
|
|
return rv;
|
|
};
|
|
}
|
|
if (!Array.prototype.indexOf) {
|
|
Array.prototype.indexOf = function (value /*, fromIndex */ ) {
|
|
var length = this.length;
|
|
var i = arguments[1] || 0;
|
|
|
|
if (!length) return -1;
|
|
if (i >= length) return -1;
|
|
if (i < 0) i += length;
|
|
|
|
for (; i < length; i++) {
|
|
if (!Object.prototype.hasOwnProperty.call(this, i)) { continue }
|
|
if (value === this[i]) return i;
|
|
}
|
|
return -1;
|
|
};
|
|
}
|
|
|
|
//
|
|
// Object
|
|
//
|
|
if (!Object.keys) {
|
|
Object.keys = function (object) {
|
|
var keys = [];
|
|
for (var name in object) {
|
|
if (Object.prototype.hasOwnProperty.call(object, name)) {
|
|
keys.push(name);
|
|
}
|
|
}
|
|
return keys;
|
|
};
|
|
}
|
|
|
|
//
|
|
// String
|
|
//
|
|
if (!String.prototype.trim) {
|
|
String.prototype.trim = function () {
|
|
return String(this).replace(/^\s\s*/, '').replace(/\s\s*$/, '');
|
|
};
|
|
}
|