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

青灯夜游
リリース: 2022-10-14 17:11:26
オリジナル
2135 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!