
Jeśli chodzi o inne obiekty JavaScriptu, omówiliśmy je (lub omówimy) przy okazji innych artykułów.
Dziś zajmiemy się dokładniej liczbami, obiektem Number, obliczeniami, weźmiemy pod lupę obiekt Math w JavaScript.
Obiekt Number
Jest to obiekt podstawowy, do obsługi liczb. Posiada własności dla stałych liczbowych:
var najwiekszaLiczba = Number.MAX_VALUE; var najmniejszaLiczba = Number.MIN_VALUE; var nieskonczonosc = Number.POSITIVE_INFINITY; var minusNieskonczonosc = Number.NEGATIVE_INFINITY; var nieJestLiczba = Number.NaN;
Metody obiektu Number:
Notacja naukowa, digits określa miejsca po przecinku:
number.toExponential([digits]);
Notacja dziesiętna:
number.toFixed([digits]);
Określenie precyzji:
number.toPrecision()
Przykład – precyzja po przecinku:
var number = new Number(51.967654321); number.toPrecision(5); // da w wyniku 51.968
Zwraca numer jako łańcuch, „podstawa” określa system liczbowy (domyślny, 2, 8, 16).
number.toString([podstawa])
Zwraca podstawową wartość reprezentowaną przez obiekt Number (przechowywaną wartość):
number.valueOf()
Wyciąga liczbę zmiennoprzecinkową z wyrażenia (łańcucha):
number.parseFloat(string)
Wyciąga liczbę całkowitą:
number.parseInt(string[, radix])
gdzie radix – podstawa powyższego łańcucha (np. 2 – bin, 10 – dec).
Jeśli podstawa nie jest podana lub jest podana jako 0, JavaScript przyjmuje podstawę 16, jeśli łańcuch wejściowy zaczyna się od „0x”.
Przykład – użycie parseInt:
parseInt("F", 16); parseInt("17", 8); parseInt("15", 10); parseInt(15.99, 10); parseInt("FXX123", 16); parseInt(1111, 2); parseInt("15*3", 10); parseInt("12", 13);
Wszystkie powyższe przykłady zwracają w wyniku 15.
Obiekt posiada także właściwości prototype oraz constructor. Może być zatem używany jako konstruktor instancji obiektu, np.:
var num = new Number(123); alert(num);
Inaczej sytuacja wygląda w przypadku obiektu Math.
Obiekt Math w JavaScript
Wszystkie metody i właściwości obiektu Math są statyczne. Oznacza to, że są dostępne bez instancji obiektu, a wywołanie w postaci var x = new Math() jest błędne (powoduje błąd TypeError).
Przykład – użycie obiektu Math:
alert(Math.abs(-123)); // 123 alert(Math.PI);
Właściwości obiektu Math
– E – stała matematyczna e (stała Eulera, 2,71…)
– LN2 – logarytm naturalny z 2 (0.693)
– LN10 – logarytm naturalny 10 (2.302)
– LOG2E – logarytm o podstawie 2 z liczby E (1.442)
– LOG10E – logarytm o podstawie 10 z liczby E (0.434)
– PI – stała matematyczna PI (3.141593)
– SQRT1_2 – pierwiastek kwadratowy z 1/2 (0.707)
– SQRT2 – pierwiastek kwadratowy z 2 (1.414)
Metody obiektu Math
– abs(number) – zwraca wartość absolutną liczby
– acos(number) – zwraca arcus cosinus z liczby (podanej w radianach)
– asin(number) – zwraca arcus sinus z liczby (podanej w radianach)
– atan(number) – zwraca arcus tangens z liczby (podanej w radianach)
– atan2(y, x) – zwraca arcus tangens ilorazu argumentów, odpowiednik arcus tangens y / x
– ceil(number) – zwraca najmniejszą liczbę całkowitą, większą lub równą (>=) podanej liczbie
– cos(number) – zwraca cosinus liczby
– exp(x) – zwraca e (Math.E) podniesione do potęgi podanej jako argument, odpowiednik Math.pow(Math.E, x)
– floor(number) – zwraca największą liczbę całkowitą mniejszą lub równą (<=) podanej liczbie – log(x) – zwraca logarytm naturalny z x
– max([val1 [ , val2 [ , …]]]) – zwraca największą liczbę spośród podanych
– min([val1 [ , val2 [ , …]]]) – zwraca najmniejszą liczbę
– pow(base, exponent) – zwraca wartość liczby base podniesionej do potęgi exponent
– random() – generuje wartość pseudolosową z przedziału 0 i 1
– round(number) – zwraca zaokrąglenie liczby to najbliższej liczby całkowitej
– sin(number) – zwraca sinus liczby
– sqrt(number) – zwraca pierwiastek kwadratowy liczby
– tan(number) – zwraca tangens liczby
Poniżej kilka przykładów użycia.
Przykład – zaokrąglanie liczb w JavaScript:
alert(Math.round(4.7)); // 5 // do 2 liczb po przecinku alert(Math.round(27.451 * 100) / 100); // 27.45 // do jednej liczby po przecinku alert(Math.round(27.451 * 10) / 10); // 27.5 // do 3 liczb po przecinku alert(Math.round(7.111111 * 1000) / 1000); // 7.111 alert(Math.ceil(0.60)); // 1 alert(Math.ceil(-5.4)); // -5
Zauważmy konieczność mnożenia liczby przez 10, 100 lub 1000, a później dzielenia całości przez 10, 100 lub 1000, zależnie od przypadku.
Przykład – losowanie / liczby losowe w JavaScript:
alert(Math.random()); alert(Math.floor(Math.random() * 123));
Przykład – min / max:
alert(Math.min(1,2,3)); alert(Math.max(1,2,3));
Przykład – potęgowanie i pierwiastkowanie w JavaScript:
var delta = Math.pow(b, 2) - (4 * a * c); var sqrtDelta = Math.sqrt(delta);
Podsumowanie
Przedstawione informacje, plus oczywiście znajomość matematyki, wystarczą do sprawnego wykonywania obliczeń w JavaScript. Naprawdę przyda się to nieraz, szczególnie przy pisaniu gier, czy też programowaniu bardziej zaawansowanych operacji na mapach (np. Google Maps).