ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScriptの数値型は何種類ありますか?

JavaScriptの数値型は何種類ありますか?

青灯夜游
青灯夜游オリジナル
2022-09-23 17:15:372262ブラウズ

JavaScript には浮動小数点型という数値型が 1 つだけあります。 JavaScript は内部的に数値を 64 ビット浮動小数点型として格納するため、実際には JavaScript には整数型は存在しません。 JavaScriptの数値形式では、表現できる整数の範囲は境界値も含めて「[-2^53~2^53]」ですが、配列のインデックスやビット演算子などは32を使用するので注意が必要です。 -ビット整数。

JavaScriptの数値型は何種類ありますか?

このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript には数値型が 1 つだけあり、内部的には 64 ビット浮動小数点数として表されます。したがって、実際には JavaScript には整数型は存在しません。

print(3/2); // 1.5

値が浮動小数点数として処理されていることがわかります。

JavaScript は、整数や小数に関係なく、内部的に数値を 64 ビット浮動小数点型で格納するためです。混乱を招くのは、一部のビット演算の実行には整数が必要なため、64 ビット浮動小数点数が自動的に 32 ビット整数に変換されることです。次にビット演算を実行します。 JavaScript では、1 と 1.0 は同じです

1 == 1.0 true
0.1+0.2 == 0.3 false
0.3/0.1 = 2.99999999996
(0.3-0.2) === (0.2-0.1) false

つまり、小数を含む演算を実行する場合は注意してください

JavaScript の数値形式 (IEEE で定義されている 64 ビット浮動小数点形式) に従ってください。 754)、表現できる整数の範囲は境界値を含めて[-2^53~2^53]です。ただし、配列のインデックス付け、ビットごとの演算子などでは 32 ビット整数が使用されることに注意してください。

浮動小数点値の最高精度は小数点以下 17 桁ですが、算術計算を実行する場合、その精度は整数の精度よりもはるかに低くなります。たとえば、0.1 を 0.2 に加算した結果は、0.3 ではなく、0.30000000000000004 になります。この小さな丸め誤差により、特定の浮動小数点値をテストすることができなくなります。

2 進浮動小数点数は 1/2、1/8 などを正確に表現できますが、1/10、1/100 などを正確に表現できないためです。したがって、0.1 のような単純な数値は正確に表現できません。

浮動小数点数の精度の問題により、比較中に予期しない結果が得られる場合があります:

print((0.1+0.2) == 0.3); // false
print(0.1+0.2);          // 0.30000000000000004
print(0.3);              // 0.3

print((10/3-3) == (1/3));// false
print(10/3-3);           // 0.3333333333333335
print(1/3);              // 0.3333333333333333

整数の場合、53 ビット以内の整数が使用されている限り、この問題は発生しません。 、安心してご利用いただけます。

整数は、10 進数で表現されるほかに、8 進数 (基数 8) または 16 進数 (基数 16) のリテラルで表現することもできます。このうち、8 進数リテラルの最初の桁はゼロ (0) であり、その後に一連の 8 進数 (0 ~ 7) が続く必要があります。リテラルの値が範囲を超える場合、先頭のゼロは無視され、後続の値は 10 進数値として解釈されます。

8 進リテラルは厳密モードでは無効であり、このモードをサポートする JavaScript エンジンでエラーがスローされます。

16 進リテラル値の最初の 2 桁は 0x であり、その後に任意の 16 進数字 (0 ~ 9 および A ~ F) が続く必要があります。このうち、A ~ F は大文字でも小文字でも構いません。

浮動小数点値の保存には整数値の保存の 2 倍のメモリ領域が必要なため、ECMAScript は浮動小数点値を整数値に変換するのに時間を費やしません。明らかに、小数点の後に数字が続かない場合は、値を整数値として保存できます。同様に、浮動小数点値自体が整数 (1.0 など) を表す場合、その値も整数に変換されます。

#数値オブジェクト

#文字列オブジェクトに対応する文字列値と同様に、数値にも対応する数値オブジェクトがあります。 、つまり Number 。

Numbers は、値に対応するプロパティを直接呼び出すこともできます。

print((6).toString()); // 6
この例では、値を括弧内に追加する必要があることに注意してください。そうしないと、ピリオドが小数点とみなされます。

Number の使い方は String の使い方と同様で、型変換や数値オブジェクトの作成などが行えます。

型変換を実行するときに変換が失敗すると、Number は NaN を返します。数値オブジェクトを使用する場合も同様です。

var a = Number('x');
print(typeof a, a);       // number NaN
var b = new Number('x'); 
print(typeof b, b);       // object [Number: NaN]
Number には、次の 5 つの特別な属性 (読み取り専用) があります。

  • MAX_VALUE : 正の数値の最大値。それより大きい場合は、 Infinity

  • MIN_VALUE : 正の数値の最小値、それより小さくなると 0

  • NaN : 数値ではありません

  • NEGATIVE_INFINITY: 負の無限大、つまり -Infinity

  • POSITIVE_INFINITY: 正の無限大、つまり Infinity

print(Number.MAX_VALUE);         // 1.7976931348623157e+308
print(Number.MIN_VALUE);         // 5e-324
print(Number.NaN);               // NaN
print(Number.NEGATIVE_INFINITY); // -Infinity
print(Number.POSITIVE_INFINITY); // Infinity

#Infinity#数値演算結果が JavaScript が表現できる数値の上限を超える場合、結果は特殊な無限値 (Infinity) になります。負の値は JavaScript が表現できる負の数値の範囲を超えています。結果は -Infinity になります。

演算結果が限りなくゼロに近く、JavaScript が表現できる最小値より小さい場合 (アンダーフロー)、結果は 0 になります。負の数がアンダーフローの場合、結果は -0 になり、正の数になります。アンダーフロー、オーバーフローの場合、結果は 0 になります。

JavaScript では、グローバル変数 Infinity と NaN が事前定義されており、どちらも読み取り専用変数です。

由于内存的限制,ECMAScript并不能保存世界上所有的数值。ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中——在大多数浏览器中,这个值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中——在大多数浏览器中,这个值是1.7976931348623157e+308。如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。具体来说,如果这个数值是负数,则会被转换成-Infinity(负无穷),如果这个数值是正数,则会被转换成Infinity(正无穷)。 

如果某次计算返回了正或负的Infinity值,那么该值将无法继续参与下一次的计算,因为Infinity不是能够参与计算的数值。要想确定一个数值是不是有穷的(换句话说,是不是位于最小和最大的数值之间),可以使用isFinite()函数。

NaN

NaN是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。

对于NaN,要记住的一点是,只要运算中出现NaN,结果就一定是NaN,就算是"NaN*0"这样的运算,也一样是NaN。只要对NaN运行比较运行,结果就一定是false,就算"NaN==NaN"/"NaN!=NaN"等,都是false。

要判断一个值是否为NaN,可以使用isNaN()函数:

print(isNaN(NaN));  // true
print(isNaN(0/0));  // true

在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。

也可以使用x!==x来判断x是否为NaN,只有在x为NaN的时候,这个表达式的值才为true。

inFinite()

isFinite函数用于判断一个数是否为“正常”的数值:

print(isFinite(Number.NaN));               // false
print(isFinite(Number.NEGATIVE_INFINITY)); // false
print(isFinite(Number.POSITIVE_INFINITY)); // false

除了以上3个特殊值外,其他值的结果都为true

假如x是一个普通数值,则有:

x/0 = Infinity
x%0 = NaN
x/Infinity = 0
x%Infinity = x
0/0 = NaN
0%0 = NaN
Infinity/x = Infinity
Infinity%x = NaN
Infinity/Infinity = NaN
Infinity%Infinity = NaN

完整输出如下:

print(0 / 0);           // NaN
print(3 / 0);           // Infinity
print(Infinity / 0);    // Infinity
print(0 % 0);           // NaN
print(3 % 0);           // NaN
print(Infinity % 0);    // NaN
----------
print(0 / 4);           // 0
print(3 / 4);           // 0.75
print(Infinity / 4);    // Infinity
print(0 % 4);           // 0
print(3 % 4);           // 3
print(Infinity % 4);    // NaN
----------
print(0 / Infinity);           // 0
print(3 / Infinity);           // 0
print(Infinity / Infinity);    // NaN
print(0 % Infinity);           // 0
print(3 % Infinity);           // 3
print(Infinity % Infinity);    // NaN

负零与正零

负零与正零的值相等,不过毕竟带有符号,在一些运算中会有符号方面的差别,比如:

var zero = 0; 
var negz = -0;

此时,zero 等于 negz , 但1/zero 却不等于 1/negz。

【相关推荐:javascript视频教程编程基础视频

以上がJavaScriptの数値型は何種類ありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。