Skip to content

Instantly share code, notes, and snippets.

@djKianoosh
Created October 21, 2013 20:36
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save djKianoosh/7090542 to your computer and use it in GitHub Desktop.
Save djKianoosh/7090542 to your computer and use it in GitHub Desktop.
IE shims for array indexOf, string startsWith and string trim
// Some common IE shims... indexOf, startsWith, trim
/*
Really? IE8 Doesn't have .indexOf
*/
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this === null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 1) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n !== 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
};
}
/*
IE Doesn't have a .startsWith either?
*/
if (!String.prototype.startsWith) {
String.prototype.startsWith = function (str){
return this.lastIndexOf(str, 0) === 0;
};
}
// IE < 9 doesn't have a trim() for strings
if (!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
}
@satyamp
Copy link

satyamp commented Mar 6, 2015

What is the significance of using var len = t.length >>> 0;
can you please explain

@djKianoosh
Copy link
Author

@satyamp,
>>> is a bitwise operator: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Unsigned_right_shift

More importantly, the above shim was an older undocumented version of Mozilla's polyfill for Array.prototype.indexOf, the latest of which can be found here with comments (see the polyfill section): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

I don't use the above shims anymore, as there are many very good shims out there already, including the ones from Mozilla's MDN, as you can see from the link above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment