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)
直接追加する必要がありました。この関数の MDN ページには、Number
これに対する厳密なシムがあります。