Number.isInteger(x)无法在IE中运行

8

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

在IE10浏览器中会抛出错误


你能发布错误信息吗? - harishr
3个回答

9

显然,IE将DOM对象和Javascript对象视为两个不同的实体,您无法使用Object.prototype扩展DOM对象。

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

您需要编写一个单独的函数(如果需要全局),如下所示:

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

console.log(isInteger(1));

当整数表示为字符串时,此函数运行不正确。我知道这可能对大多数情况是正确的。但是,如果您的数字可以用引号括起来,您可以使用此处的最佳答案:[链接](https://dev59.com/HWkv5IYBdhLWcg3w6k5Q)`Math.floor(id) == id && $.isNumeric(id)`。 - Pavel Samoylenko

2

尽管在MSIE中添加本地原型可能会出现问题,但是您为添加到Number.prototype的方法编写的函数体是不合适的。

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

因此,更正确的实现应该是:

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

使用方法:

(1).isInteger();

如果你想使用 Number.isInteger(n),你需要直接将你的函数添加到Number对象而不是它的原型。在MDN页面上有一个严格的shim可以用于此功能。


感谢您的回答和在MDN中提供的Number.isInteger链接。但是,'("1").isInteger();'会抛出错误:未捕获的TypeError:未定义的函数。 - huangxbd1990

1
创建一个 polyfill `Number.isInteger`。
Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" &&
           isFinite(value) &&
           Math.floor(value) === value;
};

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接