JavaScriptでは、数学操作を2つの操作を通じて実装できます。
1。 +、 - 、 *、 /、%およびその他の演算子。
2。数学オブジェクトの計算関数を使用します。たとえば、Math.Pow(2,3)を使用して、2〜3のパワーを計算します。
Javaとは異なり、JavaScriptの数学的操作はエラーを投げません。計算結果のオーバーフローは0で割って、2乗の負の数値はすべて合法であり、結果はJavaScriptの特別な値です。
1。ポジティブおよび負の無限。計算結果がJavaScriptが表すことができる最大数よりも大きい場合(number.max_value)、結果は正の無限です。計算結果がJavaScriptが表すことができる最小数(-number.max_value)よりも小さい場合、結果は負の無限です。 +、 - 、 *、および /に関連する数学的操作はすべて、高度な数学の制限計算の規則に従います。 1/0の結果は無限であり、-1/0の結果は無限です。
2。プラスまたはマイナス0。計算結果が正であるが、JavaScriptが表すことができる最小小数(number.min_value)よりも少ない場合、結果は正です0。計算結果は負ですが、JavaScriptが表すことができる最大負の小数(-number.min_value)よりも大きい場合、結果は負です0。一般に、開発者はプラスとマイナス0の違いを気にする必要はありません。
3.ナン。正と負の無限でも表現できない特別な計算結果の場合、JavaScriptはNANを使用してそれらを表現します(NANは文字通り「非番号」を意味しますが、そのタイプは数であることは注目に値します)。これらの特別な計算には次のものがあります。
1).0/0。
2).Infinity/Infinity。
3)。正方形の負の数。
4)。非数字の文字列で数値変換操作を実行します。
InfinityとNanの場合、それらは「無限」と「非番号」の印刷結果の両方であり、JavaScriptのこれら2つの特別な値を表すグローバル変数名でもあります。実際、ECMAScript 3では、これら2つのグローバル変数に他の値を割り当てることもできます。このクレイジーなルールは、ECMAScript 5で修正されており、これら2つのグローバル変数を読み取り専用にしています。 Infinity変数とNAN変数に直接アクセスすることに加えて、番号オブジェクトのメンバー変数にアクセスすることにより、これら2つの特別な値を使用することもできます。
1.インフィニティはnumber.positive_infinityに相当します。
2.インフィニティは、number.negative_infinityに相当します。
3.Nanはnumber.nanに相当します。
JavaScriptでは、NANは興味深い特別な価値であり、特別なプロパティを備えています。他の値(それ自体を含む)と等しくありません。値がnanであるかどうかを判断するには、次の2つの方法があります。
1。変数xの場合、x!= xが真であるかどうかを判断します。この式は、xがnanである場合にのみ当てはまります。
2。変数xの場合、JavaScriptのグローバル関数isnan()を呼び出して、isnan(x)が真であるかどうかを判断します。この方法は、式が4つの場合に式が当てはまるため、NANは実際には厳密ではないと判断します。
1).xはnanです。
2).xは文字列であり、文字列は数字ではありません。
3).xはオブジェクトです。
4).xは未定義です。
ISNAN()に加えて、JavaScriptには別の有用なグローバル機能があります:Isfinite()。変数aの場合、次の場合には、Isfinite(a)が当てはまります。
1).aは数ですが、nanまたは正および負の無限ではありません。
2).aは文字列ですが、文字列のコンテンツは非ナンの非陽性の無限の数値です。
3).aはnullです。
4).aはブール値です。
nullや未定義などの非数字タイプは結果に影響を与えるため、iSnan()またはisfinite()を使用する前にパラメーターのタイプを判断することが最善であると個人的に思います。
実験
コードコピーは次のとおりです。
// Infinityをテストします
var a = number.max_value;
console.log(a*1.1); // Infinity
console.log(a*-1.1); //-無限
console.log(1/0); // Infinity
console.log(-1/0); //-無限
//正/ネガティブ0をテストします
var b = number.min_value;
console.log(b/2); // 0
console.log(-b/2); // 0
// NANをテストします
console.log(0/0); // nan
Console.log(Infinity/Infinity); // Nan
console.log(math.sqrt(-1)); // nan
console.log(parseint( "string")); // nan
//無限の比較をテストします
console.log(infinity === number.positive_infinity); // true
console.log(-infinity === number.negative_infinity); // true
// NAN比較をテストします
console.log(nan === nan); // false
// testisnan()
console.log(isnan(nan)); // true
console.log(isnan( "42")); // false
console.log(isnan( "string")); // true
console.log(isnan({})); // true
console.log(isnan(undefined)); // true
console.log(isnan(null)); // false
// isfinite()をテストする
console.log(isfinite(42)); // true
console.log(isfinite(infinity)); // false
console.log(isfinite(nan)); // false
console.log(isfinite( "29")); // true
console.log(isfinite( "string")); // false
console.log(isfinite(null)); // true
console.log(isfinite(undefined)); // false
console.log(isfinite(true)); // true
console.log(isfinite(false)); // true