// Production steps of ECMA-262, Edition 5, 15.4.4.14 // Reference: http://es5.github.io/#x15.4.4.14 if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (searchElement, fromIndex) { var k; // 1. Let o be the result of calling ToObject passing // the this value as the argument. if (this == null) { throw new TypeError('"this" is null or not defined'); } var o = Object(this); // 2. Let lenValue be the result of calling the Get // internal method of o with the argument "length". // 3. Let len be ToUint32(lenValue). var len = o.length >>> 0; // 4. If len is 0, return -1. if (len === 0) { return -1; } // 5. If argument fromIndex was passed let n be // ToInteger(fromIndex); else let n be 0. var n = fromIndex | 0; // 6. If n >= len, return -1. if (n >= len) { return -1; } // 7. If n >= 0, then Let k be n. // 8. Else, n<0, Let k be len - abs(n). // If k is less than 0, then let k be 0. k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); // 9. Repeat, while k < len while (k < len) { // a. Let Pk be ToString(k). // This is implicit for LHS operands of the in operator // b. Let kPresent be the result of calling the // HasProperty internal method of o with argument Pk. // This step can be combined with c // c. If kPresent is true, then // i. Let elementK be the result of calling the Get // internal method of o with the argument ToString(k). // ii. Let same be the result of applying the // Strict Equality Comparison Algorithm to // searchElement and elementK. // iii. If same is true, return k. if (k in o && o[k] === searchElement) { return k; } k++; } return -1; }; } if (!Array.prototype.lastIndexOf) { Array.prototype.lastIndexOf = function (searchElement /*, fromIndex*/) { 'use strict'; if (this === void 0 || this === null) { throw new TypeError(); } var n, k, t = Object(this), len = t.length >>> 0; if (len === 0) { return -1; } n = len - 1; if (arguments.length > 1) { n = Number(arguments[1]); if (n != n) { n = 0; } else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) { if (k in t && t[k] === searchElement) { return k; } } return -1; }; }/** * 特殊情况 * Created by wang on 15/6/23. */ //解决console未定义问题 guy window.console = window.console || (function () { var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile = c.clear = c.exception = c.trace = c.assert = function () { }; return c; })(); /* * 前端缓存 */ window.localStorage || (window.localStorage = { items: {}, setItem: function (k, v) { BI.Cache.addCookie(k, v); }, getItem: function (k) { return BI.Cache.getCookie(k); }, removeItem: function (k) { BI.Cache.deleteCookie(k); }, key: function () { }, clear: function () { this.items = {}; } });if (typeof Set !== 'undefined' && Set.toString().match(/native code/)) { } else { Set = function () { this.set = {} }; Set.prototype.has = function (key) { return this.set[key] !== undefined; }; Set.prototype.add = function (key) { this.set[key] = 1 }; Set.prototype.clear = function () { this.set = {} }; }//修复ie9下sort方法的bug ;!function (window) { var ua = window.navigator.userAgent.toLowerCase(), reg = /msie|applewebkit.+safari/; if (reg.test(ua)) { var _sort = Array.prototype.sort; Array.prototype.sort = function (fn) { if (!!fn && typeof fn === 'function') { if (this.length < 2) { return this; } var i = 0, j = i + 1, l = this.length, tmp, r = false, t = 0; for (; i < l; i++) { for (j = i + 1; j < l; j++) { t = fn.call(this, this[i], this[j]); r = (typeof t === 'number' ? t : !!t ? 1 : 0) > 0; if (r === true) { tmp = this[i]; this[i] = this[j]; this[j] = tmp; } } } return this; } else { return _sort.call(this); } }; } }(window);