JavaScript では、次の 2 つの演算を通じて数学的演算を実装できます。
1. 、-、*、/、% およびその他の演算子。
2. Math オブジェクトの計算関数を使用します。たとえば、2 の 3 乗を計算するには、Math.pow(2,3) を使用します。
Java とは異なり、JavaScript の数学的演算ではエラーが発生しません。計算結果のオーバーフロー、0 による除算、負の数値の平方根をとるなどの演算は、JavaScript ではすべて正当です。結果は、正と負の Infinity (無限大)、正と負の 0、NaN (非整数) です。番号):
1. 正と負の無限大。計算結果が JavaScript が表現できる最大数 (Number.MAX_VALUE) より大きい場合、結果は正の Infinity になります。計算結果が JavaScript が表現できる最小数 (-Number.MAX_VALUE) より小さい場合、結果は次のようになります。負の無限大。無限大に関連する 、-、*、/ などの数学演算は、高度な数学の極限計算の規則に従います。 1/0 の結果は正の無限大、-1/0 の結果は負の無限大です。
2. プラスマイナス0。計算結果が正であるが、JavaScript が表現できる最小の小数点 (Number.MIN_VALUE) より小さい場合、結果は正の 0 になります。計算結果が負であるが、JavaScript が表現できる負の最大の小数点 (-Number) より大きい場合は、結果は正の 0 になります。 .MIN_VALUE) の場合、結果は負の 0 になります。通常、開発者は正の 0 と負の 0 の違いを気にする必要はありません。
3.NaN。正負の無限大でも表現できない特殊な計算結果については、JavaScript では NaN を使用して表現します (NaN は文字通り「数値ではない」という意味ですが、その型は数値であることに注意してください)。これらの特別な計算には次のものが含まれます:
1).0/0。
2).無限/無限。
3) 負の数の平方根を計算します。
4) 数値以外の文字列に対して数値変換操作を実行します。
Infinity と NaN の場合、それらは「無限」と「非数値」の出力結果であるだけでなく、JavaScript でこれら 2 つの特別な値を表すグローバル変数名でもあります。実際、ECMAScript 3 では、これら 2 つのグローバル変数に他の値を割り当てることもできます。このおかしなルールは ECMAScript 5 で改訂され、これら 2 つのグローバル変数は読み取り専用になりました。 Infinity 変数と NaN 変数に直接アクセスするだけでなく、Number オブジェクトのメンバー変数にアクセスして、次の 2 つの特別な値を使用することもできます:
1.Infinity は Number.POSITIVE_INFINITY と同等です。
2.-Infinity は Number.NEGATIVE_INFINITY と同等です。
3.NaN は Number.NaN と同等です。
JavaScript では、NaN は非常に興味深い特別な値であり、他の値 (それ自体を含む) と等しくないという特別な特性を持っています。値が NaN かどうかを判断するには 2 つの方法があります:
1. 変数 x について、x!=x が true かどうかを判断します。この式は、x が NaN の場合にのみ当てはまります。
2. 変数 x について、JavaScript でグローバル関数 isNaN() を呼び出し、isNaN(x) が true かどうかを判断します。このメソッドを使用して NaN を決定することは、実際には厳密ではありません。なぜなら、式 isNaN(x) は次の 4 つの場合に true であるからです。
1).x は NaN です。
2).x は文字列ですが、その文字列は数値ではありません。
3).x はオブジェクトです。
4).x は未定義です。
isNaN() に加えて、JavaScript にはもう 1 つの便利なグローバル関数 isFinite() があります。変数 a の場合、isFinite(a) は次の状況で true になります:
1).a は数値ですが、NaN や正または負の無限大ではありません。
2).a は文字列ですが、文字列の内容は非 NaN、非正または負の無限数です。
3).a は null です。
4).a はブール値です。
nullやunknownなど数値以外の型は結果に影響するので、isNaN()やisFinite()を使う前にパラメータの型を決めた方が良いと個人的には思っています。
実験
//テスト陽性/陰性 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
//Infinity の比較をテストします
console.log(Infinity === Number.POSITIVE_INFINITY);//true
console.log(-Infinity === Number.NEGATIVE_INFINITY);//true
//NaN 比較をテストします
console.log(NaN === NaN);//false
//テスト isNaN()
console.log(isNaN(NaN));//true
console.log(isNaN("42"));//false
console.log(isNaN("string"));//true
console.log(isNaN({}));//true
console.log(isNaN(未定義));//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(未定義));//false
console.log(isFinite(true));//true
console.log(isFinite(false));//true