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页面上有一个严格的shim可以用于此功能。
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};