8

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

IE10浏览器会报错

4

3 回答 3

9

显然,IE 将 DOM 对象和 Javascript 对象分开处理,不能使用 Object.prototype 扩展 DOM 对象。

IE 不允许你使用非原生的原型。

您必须创建一个单独的功能(如果需要,可以使用全局功能)作为

function isInteger(num) {
  return (num ^ 0) === num;
}

console.log(isInteger(1));
于 2014-10-21T09:10:18.353 回答
2

尽管在 MSIE 中添加到本机原型可能会出现问题,但您的函数体不适合添加到Number.prototype.

原型上的方法在类型的实例this上调用,并且实例作为(并且将始终是对象,而不是原始对象)传递。

因此,更正确的实现是:

Number.prototype.isInteger = function() {
  return (this ^ 0) === +this;
}

用法:

(1).isInteger();

如果你想使用它Number.isInteger(n),你必须将你的函数直接添加到Number对象,而不是它的原型。在这个功能的 MDN 页面上有一个严格的填充程序。

于 2014-10-21T09:31:00.187 回答
1

创建一个 polyfillNumber.isInteger

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" &&
           isFinite(value) &&
           Math.floor(value) === value;
};

这应该可以解决与 IE 相关的问题。

于 2019-08-26T05:31:01.893 回答