Number.isInteger(x) which is created can not work

2019-06-17 18:28发布

Number.prototype.isInteger = Number.prototype.isInteger || function(x) {
  return (x ^ 0) === x;
}
console.log(Number.isInteger(1));

will throw error in IE10 browser

2条回答
狗以群分
2楼-- · 2019-06-17 18:38

Apparently, 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));
查看更多
贪生不怕死
3楼-- · 2019-06-17 18:48

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.

查看更多
登录 后发表回答