You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.0 KiB
120 lines
3.0 KiB
|
|
// 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*$/, ''); |
|
}; |
|
}
|
|
|