この記事では、JavaScript についての関連知識を紹介します。JavaScript には Number 型と BigInt 型の 2 つの型があります。一緒に見ていきましょう。ヘルプ。
[関連する推奨事項: JavaScript ビデオ チュートリアル、Web フロントエンド]
JavaScriptには 2 種類の数値があります。
従来の意味での数値型であるNumber型は、 64ビットIEEE-754形式で格納され、「倍精度浮動小数点数」です。これまで私たちが扱ってきた数値はすべて次のとおりです。 Number型の;
BigInt型は、任意の長さの整数を表します。通常、2 53 ~ -2 53以外の数値を表す場合を除き、これらの型は使用されません。これらの専門的なデータ型については、後の章で詳しく紹介します。
数値を記述する方法は非常に簡単ですが、 JavaScrptは便利で高速な構文糖衣がたくさんあります。これらの糖衣構文を学習すると、コードの読み取り能力が向上するだけでなく、コードの高度な感覚も向上します。
10 進数は最も単純であり、ほぼすべての記事で多かれ少なかれこれを使用します。たとえば、変数を作成して100億を格納します。
10億 = 10000000000 とします。
虽然操作起来非常简单,但是存在一个问题:很难数清楚1后面到底有几个0 ,如果我们写的是转账代码,错个0可能会倾家荡产。
このとき、次のように_区切り文字として使用できます。
10億 = 10_000_000_000;
上記のコードは明らかに0の数を数えることができ、これは明らかに最適な解決策です。
ここの_スコアはJavaScriptの構文上の糖衣であり、実行中にエンジンによって無視されます。上記の 2 つの記述方法は同じ効果がありますが、読み取りエクスペリエンスは大きく異なります。
清気の脳回路
子供用の靴によっては、私は子供の頃から常に4の0のグループに属しているのに、なぜ3 0グループ化する必要があるのかと疑問に思うことがあります。所以,我们可以写成下面的方式,同样没有问题:
10億 = 100_0000_0000;
あるいは、次のように書くこともできます。
10億 = 1_0000_0000_00;
这里我想表达的是,不论你采用哪种分割方式,都是不影响数字本身的大小的,快想一个逼格最高的方式吧!
_を使用すると、多くの0きれいに分割できますが、実際には、通常、このようには記述しません。たとえば、 10000000000 「100 億」と記述することで、多くの0省略でき、その結果、重複する可能性が低くなります。間違い。
JavaScript 0省略する方法も用意されています。文字eの後に数字を続けて0の数を表すことができます。次に例を示します。
10billion = 1e10; // 100億、1、1が10秒solsole.log(3.14e9); // 3140000000を使用し、続いて7 0を続けます。ご質問がある場合は、見下ろしてください。
上記のe10 1_0000_0000_00 1は非常に0です10
1e10 === 1 * 1_0000_0000_00;//e10表示1后面10个03.14e9 === 3.14 * 1_000_000_000;//e9表示1后面9个0
この方法を使用して、 1ナノメートルなどの非常に小さな数値を表すこともできます。
let nm = 0.000000001; //単位(メートル)
0多すぎるため、 _使用することもできます。
nm = 0.000_000_001; とします。
もちろん、次のようにe使用してすべての0省略することもできます。
let nm = 1e-9;//9 1 の左側に 0 (小数点の前も含む)
つまり、 e-9 1 -9 、つまり1/1000_000_000を意味するため、次の等式が成り立ちます。
1e-9 === 1 / 1_000_000_000;3.14e-8 === 3.14 / 1_000_000_00;
16 進数は、色やエンコーディングなど、プログラミングで一般的に使用される形式です。通常の数値の前に0x追加して、16 進数を表すことができます。
let hex = 0xff;//255、大文字と小文字は区別されません、0xFF は同じです
2 進数は0bで始まります。
bin = 0b1011; // 11とします
8 進数は0oで始まります。
oct = 0o777;//511 とします
この単純な記述方法では、これら 3 つの特殊な型のみがサポートされています。他の基数については、特殊な関数 ( parseInt ) を使用して生成できます。
toString方法可以把数字转为对应进制base的字符串形式。
栗をあげます:
let num = 996; console.log(num.tostring(8)); // Octal String Console.log(num.tostring(16)); // hexadecimal string console.log(num.tostring(32)); // 32 の 16 進文字列に変換します
コードの実行結果は次のとおりです。

baseの範囲は2 ~ 36です。入力しない場合、デフォルトは10です。
数字を使用してtoStringメソッドを直接呼び出す場合、場合によっては2つを適用する必要があります.
console.log(123.toString(8));//Error,语法错误console.log(123..toString(8));//正确,173
数値の後に.が 2 つあります。これはJavaScriptでは数値の後の最初の.が関数を呼び出す . であるためです.
如果是小数就不存在这个问题,举个栗子:
console.log(3.14.toString(8));
または、括弧を使用して、2つのドットの使用を避けることができます。
console.log((123).toString(8));//'173
舍入是数字最常用的操作之一,通常包括:
切り捨て、 Math.floor(num)
console.log(Math.floor(3.14));//3 console.log(Math.floor(9.99));//9 console.log(Math.floor(-3.14));//-4 console.log(Math.floor(-9.99));//-10
四捨五入の原則には従わず、現在の値以下の最も近い整数を直接取得します。
まとめ、 Math.ceil(num)
console.log(Math.ceil(3.14));//4 console.log(Math.ceil(9.99));//10 console.log(Math.ceil(-3.14));//-3 console.log(Math.ceil(-9.99));//-9
四捨五入の原則には従わず、現在の数値以上の最も近い整数を直接取得します。
就近取整, Math.round(num)
console.log(Math.round(3.14));//3 console.log(Math.round(9.99));//10 console.log(Math.round(-3.14));//-3 console.log(Math.round(-9.99));//-10
四捨五入の原則に従って、現在の数値に最も近い整数が採用されます。
小数点以下を削除、 Math.trunc(num)
console.log(Math.trunc(3.14));//3 console.log(Math.trunc(9.99));//9 console.log(Math.trunc(-3.14));//-3 console.log(Math.trunc(-9.99));//-9
直接移除小数点后面的数字,取整数位。 IEブラウザはこの方法をサポートしていません
上記の 4 つの方法を比較してください。
| 数学の床 | Math.ceil | 数学ラウンド | Math.trunc | |
|---|---|---|---|---|
| 3.14 | 3 | 4 | 3 | 3 |
| 9.99 | 9 | 10 | 10 | 9 |
| -3.14 | -4 | -3 | -3 | -3 |
| -9.99 | -10 | -9 | -10 | -9 |
上記の方法は、単純に小数を整数に丸めるだけです。たとえば、円周率の最後の4桁を取得する場合、どうすればよいでしょうか。
次の 2 つの方法があります。
数学乘除计数
let pi = 3.1415926;console.log(Math.round(pi * 10000) / 10000);//3.1416
上記のコードは、まずpiに10000を乗算し、次に四捨五入してから10000で除算し、精度要件を満たす結果を取得します。但是,这么做看起啦呆呆的, JavaScript为我们提供了更简单的方法。
toFixed(n)
let pi = 3.1415926;console.log(pi.toFixed(4));//3.1416
上記のコード+ pi.toFixed(4) 、出力に問題がないtoFixedです。
さらに、10進数のマンティッサが十分に長くない場合、 toFixed最後に'0'を追加します。
num = 3.1; console.log(num.tofixed(9));
コードの実行結果は次のとおりです。 
这也侧面证明了toFixed的返回值是一个字符串,否则0会被省略。
浮点数表示在很多情况下总是存在偏差
在计算机内部,浮点数根据IEEE-754标准进行表示,其中单精度浮点数32位,双精度浮点数64位。倍精度浮動小数点数では、符号を表すために1ビットが使用され、有効数字の格納に52ビットが使用され、小数点の位置の格納に11ビットが使用されます。
64ビットはすでに非常に多くの数を表していますが、境界を越える可能性はまだあります。たとえば、:
let bigNum = 1e999;console.log(bigNum);//無限大
最大値を超える数値はInfinity (無限大)となり、元の数値の大きさが失われ、一種の偏差となります。
私たちが学ぶ必要がある別の種類の逸脱があります。
console.log(0.1+0.2 === 0.3);//falseconsole.log(0.1 + 0.2);
代码执行结果如下:

そうです、 0.1 + 0.2の結果は0.3ではなく、 0の後に4続いたものになります。
この種の逸脱は、特にショッピングモールや銀行の仕事のシナリオでも非常に致命的です。
従業員の給料がわずか 20 セントだったので、従業員の給料を差し引いて何百万ドルも盗んだ銀行員の話を聞いたことがあります。
もしこれが私に起こったら、私は間違いなくそれを見つけることができないと思うので、常に正確であることが非常に重要です。
この話が本当かどうかは分かりません~~
一般的な 10 進数を例に挙げてみましょう。10 進数には 2 つの奇妙な点があります。1 つは無限繰り返し小数、もう 1 つは無限非繰り返し小数です。たとえば、 1/3無限繰り返し小数です。 10 進数0.3333333(3) 、および pi これは、無限非反復 10 進数です。無限とは、数値の大きさを数値的に明確に記述することができず、記述できる内容が不正確であることを意味します。
2 進数では無限ループする数値もいくつかあります。違いは、10 進数では非常に単純に見える0.1のような数値が、2 進数では無限ループする 10 進数であることです。
例えば:
let x = 0.1;console.log(x.toFixed(20));
コードの実行結果は次のとおりです。

信じられないことだと思いませんか?単純に変数を作成して値0.1を割り当て、小数点以下20桁を取得しましたが、驚くべき結果が得られました。
角度を変えると、この現象を理解しやすくなるかもしれません。10 進法では、 1/10や996/1000など、整数を10または10整数乗で割った値が正規の正確な数になります。ただし、 3で割ると、 1/3などのループ結果が得られます。
この記述はバイナリに変換した場合にも有効です。
在二进制中,任何整数除以2或者2的整数次幂都是正常的精确的数字,但是,如果以10为除数,就会得到无限循环的二进制数。
したがって、10 進数で1/3表現できないのと同様に、2 進数では0.1と0.2正確に表現できないと結論付けることができます。
知らせ:
この種のデータの逸脱は JavaScript の欠陥ではなく、PHP、Java、C、Perl、Ruby でも同じ結果です。
丸め
在展示一个无限循环小数的时候,我们可以直接使用toFixed方法对小数进行舍入,该方法直接返回字符串,非常方便用于展示价格。
0.3.tofixed(2); // 0.30
使用小单位
もう1つの方法は、小さなユニットを使用して、Yuanの代わりにセントを使用して総価格を計算するなど、価格と距離を計算できることです。ただし、この方法は小数点の出現回数を減らすだけであり、小数点の出現を完全に回避する方法はありません。
JavaScript数字には、 InfinityとNaN 2つの特別な値があります。
数字が通常の数字であるかどうかを判断する方法は?
次の 2 つの方法を使用できます。
isfinite(val)
この関数は、パラメーターval数値タイプに変換し、数値が有限かどうかを判断し、数値がNaN 、 Infinity 、または-Infinityではない場合にtrueを返します。
console.log(isFinite(NaN));//falseconsole.log(isFinite(Infinity));//falseconsole.log(isFinite(3));//trueconsole.log(isFinite('12'));//真実コードの実行結果は次のとおりです。
由于无法转为数字的字符串会被转为NaN ,所以我们可以使用isFinite方法判断字符串是不是数字串:
console.log(isFinite('xxxx'));//falseconsole.log(isFinite('Infinite'));//falseconsole.log(isFinite(' '));//true、空の文字列は 0 に変換されますコードの実行結果は次のとおりです。

イスナン(ヴァル)
当val为NaN或者无法转为数字的其他值时,返回true 。
console.log(isNaN(NaN));//trueconsole.log(isNaN('Infinite'));//trueコード実行の結果:
直接読む代わりにisNaN関数を使用するのはなぜですか?
例えば:
console.log(nan === nan); // false
コードの実行結果は次のとおりです。
これは、 NaNそれ自体を含む任意の数と等しくないためです。
Object.is(a,b)可以判断参数a和b是否相等,若相等返回true ,否则返回false ,它的结果只有三种情况:
NaN と比較できる
console.log(object.is(nan、nan)); // true
コードの実行結果:

0 と -0
console.log(object.is(0、-0)); // false
コードの実行結果:

コンピュータ内ではプラスとマイナスは0と1で表されますが、符号の違いにより0と-0は実際には異なり、表現方法も異なります。
他の
他の比較状況はa === bとまったく同じです。
parseIntとparseFloat文字列をNumberとは+ 、それらの制限を緩くすることができます。たとえば、 "100¥"のような文字列に+とNumber使用すると、必然的にNaNが返されますが、 parseIntとparseFloat使用すると簡単に処理できます。
例えば:
console.log(+"100円");console.log(parseInt("100円"));console.log(parseFloat("12.5円"));コードの実行結果:

parseIntとparseFloat文字列から数値を読み取れなくなるまで読み取ります。どちらも、 "99px"や"11.4em"などの数字で始まる文字列の処理に特に適していますが、他の文字で始まる文字列の場合はNaNが返されます。
console.log(parseInt('ff2000'));//NaN但是,我们发现ff2000实际上是一个十六进制的数字字符串, parseInt同样可以处理这种情况,不过需要添加一个进制参数。
例えば:
console.log(parseInt('FF2000',16));
// 16719872
console.log(parseint( '0xff2000'、16));
//16719872
console.log(parseInt('nnnnnn',36));
// 1430456963コードの実行結果:

組み込みのMathオブジェクトには、よく使用される多くの定数と方法が含まれています。
Math.pi
Π無限の非環状定数であり、代わりにMath.PI使用できます。
console.log(math.pi);

Math.random()
間隔[0,1)で乱数を生成します。
console.log(Math.random());console.log(Math.random());

特定の範囲内の乱数が必要な場合は、それに特定の値を乗算してから丸めます。
Math.Pow(A、B)
たとえば、 Bを計算します。
console.log(math.pow(2,3)); // 8
math.max()/math.min()
从任意数量的参数中选出一个最大/最小值:
console.log(math.max(1,2,3,4,5)); // 5console.log(math.min(1,2,3,4,5)); // 1
