guy 7 years ago
parent
commit
8fe9ae8355
  1. 110
      bi/polyfill.js
  2. 110
      docs/polyfill.js
  3. 110
      src/polyfill/array.js

110
bi/polyfill.js

@ -1,33 +1,99 @@
if(![].indexOf){ // Production steps of ECMA-262, Edition 5, 15.4.4.14
/** // Reference: http://es5.github.io/#x15.4.4.14
* 检查指定的值是否在数组中 if (!Array.prototype.indexOf) {
* @param {Object} o 要检查的值 Array.prototype.indexOf = function (searchElement, fromIndex) {
* @return {Number} o在数组中的索引如果不在数组中则返回-1
*/ var k;
Array.prototype.indexOf = function (o) {
for (var i = 0, len = this.length; i < len; i++) { // 1. Let o be the result of calling ToObject passing
if (_.isEqual(o, this[i])) { // the this value as the argument.
return i; 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; return -1;
} }
}
if(![].lastIndexOf){ // 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.
* ie67不支持数组的这个方法 k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
* @param {Object} o 要检查的值
* @return {Number} o在数组中的索引如果不在数组中则返回-1 // 9. Repeat, while k < len
*/ while (k < len) {
Array.prototype.lastIndexOf = function (o) { // a. Let Pk be ToString(k).
for (var len = this.length, i = len - 1; i >= 0; i--) { // This is implicit for LHS operands of the in operator
if (_.isEqual(o, this[i])) { // b. Let kPresent be the result of calling the
return i; // 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; 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. * Created by wang on 15/6/23.

110
docs/polyfill.js

@ -1,33 +1,99 @@
if(![].indexOf){ // Production steps of ECMA-262, Edition 5, 15.4.4.14
/** // Reference: http://es5.github.io/#x15.4.4.14
* 检查指定的值是否在数组中 if (!Array.prototype.indexOf) {
* @param {Object} o 要检查的值 Array.prototype.indexOf = function (searchElement, fromIndex) {
* @return {Number} o在数组中的索引如果不在数组中则返回-1
*/ var k;
Array.prototype.indexOf = function (o) {
for (var i = 0, len = this.length; i < len; i++) { // 1. Let o be the result of calling ToObject passing
if (_.isEqual(o, this[i])) { // the this value as the argument.
return i; 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; return -1;
} }
}
if(![].lastIndexOf){ // 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.
* ie67不支持数组的这个方法 k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
* @param {Object} o 要检查的值
* @return {Number} o在数组中的索引如果不在数组中则返回-1 // 9. Repeat, while k < len
*/ while (k < len) {
Array.prototype.lastIndexOf = function (o) { // a. Let Pk be ToString(k).
for (var len = this.length, i = len - 1; i >= 0; i--) { // This is implicit for LHS operands of the in operator
if (_.isEqual(o, this[i])) { // b. Let kPresent be the result of calling the
return i; // 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; 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. * Created by wang on 15/6/23.

110
src/polyfill/array.js

@ -1,31 +1,97 @@
if(![].indexOf){ // Production steps of ECMA-262, Edition 5, 15.4.4.14
/** // Reference: http://es5.github.io/#x15.4.4.14
* 检查指定的值是否在数组中 if (!Array.prototype.indexOf) {
* @param {Object} o 要检查的值 Array.prototype.indexOf = function (searchElement, fromIndex) {
* @return {Number} o在数组中的索引如果不在数组中则返回-1
*/ var k;
Array.prototype.indexOf = function (o) {
for (var i = 0, len = this.length; i < len; i++) { // 1. Let o be the result of calling ToObject passing
if (_.isEqual(o, this[i])) { // the this value as the argument.
return i; 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; return -1;
} }
}
if(![].lastIndexOf){ // 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.
* ie67不支持数组的这个方法 k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
* @param {Object} o 要检查的值
* @return {Number} o在数组中的索引如果不在数组中则返回-1 // 9. Repeat, while k < len
*/ while (k < len) {
Array.prototype.lastIndexOf = function (o) { // a. Let Pk be ToString(k).
for (var len = this.length, i = len - 1; i >= 0; i--) { // This is implicit for LHS operands of the in operator
if (_.isEqual(o, this[i])) { // b. Let kPresent be the result of calling the
return i; // 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; 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;
};
} }
Loading…
Cancel
Save