Number.prototype.isInteger = Number.prototype.isInteger || function(x) {
return (x ^ 0) === x;
}
console.log(Number.isInteger(1));
Number.prototype.isInteger = Number.prototype.isInteger || function(x) {
return (x ^ 0) === x;
}
console.log(Number.isInteger(1));
will throw error in IE10 browser
Share Improve this question asked Oct 21, 2014 at 8:54 huangxbd1990huangxbd1990 2392 gold badges4 silver badges10 bronze badges 1- can you post the error – harishr Commented Oct 21, 2014 at 9:04
3 Answers
Reset to default 10Apparently, IE treats DOM objects and Javascript objects separately, and you can't extend the DOM objects using Object.prototype.
IE doesn't let you use a prototype that is not native..
You'll have to make a separate function (global if you want) as
function isInteger(num) {
return (num ^ 0) === num;
}
console.log(isInteger(1));
Notwithstanding possible issues with adding to native prototypes in MSIE, your function body is inappropriate for a method added to Number.prototype
.
Methods on the prototype are called on instances of the type, and the instance is passed as this
(and will always be an object, not a primitive).
Therefore a more correct implementation would be:
Number.prototype.isInteger = function() {
return (this ^ 0) === +this;
}
with usage:
(1).isInteger();
If you wanted to use Number.isInteger(n)
instead, you would have had to add your function directly to the Number
object, not its prototype. There's a rigorous shim for this on the MDN page for this function.
Create a polyfill Number.isInteger
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
This should solve the issue related to IE.