Number.prototype.isInteger = Number.prototype.isInteger || function(x) {
return (x ^ 0) === x;
}
console.log(Number.isInteger(1));
IE10浏览器会报错
Number.prototype.isInteger = Number.prototype.isInteger || function(x) {
return (x ^ 0) === x;
}
console.log(Number.isInteger(1));
IE10浏览器会报错
显然,IE 将 DOM 对象和 Javascript 对象分开处理,不能使用 Object.prototype 扩展 DOM 对象。
IE 不允许你使用非原生的原型。
您必须创建一个单独的功能(如果需要,可以使用全局功能)作为
function isInteger(num) {
return (num ^ 0) === num;
}
console.log(isInteger(1));
尽管在 MSIE 中添加到本机原型可能会出现问题,但您的函数体不适合添加到Number.prototype
.
原型上的方法在类型的实例this
上调用,并且实例作为(并且将始终是对象,而不是原始对象)传递。
因此,更正确的实现是:
Number.prototype.isInteger = function() {
return (this ^ 0) === +this;
}
用法:
(1).isInteger();
如果你想使用它Number.isInteger(n)
,你必须将你的函数直接添加到Number
对象,而不是它的原型。在这个功能的 MDN 页面上有一个严格的填充程序。
创建一个 polyfillNumber.isInteger
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
这应该可以解决与 IE 相关的问题。