Created
October 21, 2013 20:36
-
-
Save djKianoosh/7090542 to your computer and use it in GitHub Desktop.
IE shims for array indexOf, string startsWith and string trim
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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,
>>>
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
What is the significance of using var len = t.length >>> 0;
can you please explain