Numbers

Wartość liczbowa składa się z dowolnej serii znaków liczbowych, na przykład:

5

Typ danych liczbowych zawiera też kilka specjalnych właściwości globalnych reprezentujących pojęcia liczbowe, np. Infinity i NaN, które oznaczają „nie liczbę”, czyli potencjalny wynik próby przeprowadzenia obliczeń matematycznych na wartościach innych niż liczbowe.

Obiekt liczbowy

Gdy wartość jest przekazywana do funkcji Number(), jest ona konwertowana na odpowiednik liczbowy. Na przykład ciąg liczbowy tworzy równoważny obiekt liczbowy:

Number( "10" );
> 10

Przekazywanie wartości false lub null do Number() zwraca 0, a true zwraca 1.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

Jeśli nie można przekonwertować wartości, na przykład undefined lub ciągu znaków zawierającego znaki nienumeryczne, funkcja Number zwraca NaN:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

Jak podano w sekcji Dziedziczenie prototypu, prawdopodobnie nie będziesz mieć prawie żadnego powodu, aby używać obiektu Number jako konstruktora, ponieważ zamiast literału liczbowego tworzy on obiekt Number.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

Ten obiekt zachowuje się jako jego wartość przypisana podczas działań matematycznych, ale nie spełnia rygorystycznych porównań równości z literałami liczbowymi, ponieważ typy danych nie są ze sobą zgodne. Nie zapewnia to żadnych praktycznych korzyści w stosunku do wartości literałowej.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

Liczby zmiennoprzecinkowe i całkowite

W JavaScripcie jest tylko 1 typ liczb: 64-bitowa IEEE 754-1985 podwójna precyzja liczb zmiennoprzecinkowych od -2^1024 do 2^1024. Zanim JavaScript zapisze liczbę w pamięci, najpierw przelicza ją na binarną liczbę zmiennoprzecinkową, nazywaną też float.

Ta 64-bitowa pamięć masowa (jeden dodatni lub ujemny bit „sygnatury”, 11 bitów dla wykładnika i 52 bity dla ułamka) może powodować błędy precyzji w przypadku dowolnej liczby cyfr, która nie mieści się w dozwolonym zakresie. To ograniczenie jest nieodłączne w typie danych liczbowych JavaScriptu.

0.1 + 0.7
> 0.7999999999999999

Wartość liczbowa może być zapisywana w postaci całkowitej, czyli liczby zmiennoprzecinkowej bez ułamka od -(2^53 − 1) do 2^53 − 1. Liczby zmiennoprzecinkowe i całkowite są przechowywane w ten sam sposób, więc nie ma praktycznej różnicy w sposobie ich działania. Aby uniknąć błędów precyzji, zalecamy jednak używanie liczb całkowitych, gdy tylko jest to możliwe.

Operatory liczbowe

Gdy używasz standardowych operatorów matematycznych z podstawowymi liczbami, obowiązuje matematyczna kolejność działań: najpierw wszelkie wyrażenia w nawiasach są sprawdzane, a potem wykładniki, mnożenie, dzielenie, dodawanie i odejmowanie.

Operator Nazwa Opis Wykorzystanie Wyniki
+ Dodanie 2+2 4
- Odejmowanie 4-2 2
* Mnożenie 2*5 10
/ Podział 10/5 2
++ Inkrementacja Dodaje 1 do liczby 2++ 3
-- Zmniejsz Odejmuje jeden od liczby 3-- 2
** Wykładnik Zwraca wynik podniesienia pierwszego argumentu
do potęgi drugiego operandu.
2**4 16
% Pozostało Zwraca resztę pozostawioną po podzieleniu pierwszego argumentu
przez drugi operand.
12%5 2

Możesz też używać operatorów przypisania matematycznego, aby wykonać operację matematyczną na wartości zmiennej i od razu przypisać do niej tę nowo obliczoną wartość.

Operator Nazwa Wykorzystanie
+= Przypisanie dodania myValue += 2
-= Przypisanie odejmowania myValue -= 2
*= Przypisanie mnożenia myValue *= 2
/= Przypisanie oddziału myValue /= 2
**= Przypisanie wykładnika myValue **= 2
%= Pozostałe przypisanie myValue %= 2

Wartości symboliczne

Obiekt liczbowy ma też zastosowanie w kilku szczególnych przypadkach: wartości „nie jest liczbą” (NaN) oraz wartości reprezentujące nieskończoność, które mogą być dodatnie (Infinity) lub ujemne (-Infinity).

Z podzieleniem przez 0 możesz rzadko spotykać się z działaniem Infinity. W większości języków programowania występuje wtedy błąd:

10 / 0
> Infinity

Pamiętaj, że w JavaScripcie wielkość liter ma znaczenie. Infinity to typ danych liczbowy odzwierciedlający koncepcję nieskończoności, ale infinity nie ma specjalnego znaczenia:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (oznaczający „To nie liczba”) pojawia się częściej, gdy wyniku operacji arytmetycznej nie można zapisać jako liczby. Na przykład JavaScript próbuje wywnioskować typ danych na podstawie wartości i kontekstu, więc w operacji matematycznej może zostać użyty literał ciągu znaków zawierający tylko liczbę:

"2" * 2;
> 4

Jeśli jednak tego ciągu nie uda się przetworzyć jako wartości liczbowej, operacja matematyczna zwróci wartość inną niż liczba:

"two" * 2;
> NaN

NaN jest zwracany w każdym przypadku, gdy nieprawidłowa wartość jest reprezentowana w operacji matematycznej jako liczba. Przykłady:

  • Nieudane konwersje liczbowe (np. parseInt( undefined ))
  • Operacje arytmetyczne, w których wynik nie jest liczbą rzeczywistą (np. 0 / 0, Math.sqrt( -10 ))
  • Operacja arytmetyczna z wynikiem nieokreślonym (0 * Infinity)
  • Operacja arytmetyczna, która zawiera konkretny wynik NaN (NaN + 2) lub NaN (2 * "string" / 2)

Sprawdź swoją wiedzę

Co jest wynikiem przekazania pola false do Number()?

0
Fałsz
NaN
1

Jaki jest wynik poniższego działania matematycznego?

"Six" * 3

NaN
2
18
Prawda
0