Objekt Math v JavaScriptu vsebuje matematične konstante in metode za računanje. Uporabljamo ga pri zaokroževanju, iskanju največjih in najmanjših vrednosti, korenjenju, potenciranju, delu s trigonometričnimi funkcijami in pri ustvarjanju psevdonaključnih števil.
Pomni: Objekt Math je statični objekt. To pomeni, da ne ustvarjamo primerkov z zapisom new Math(), ampak lastnosti in metode uporabljamo neposredno, na primer Math.PI ali Math.floor(2.8).
Osnovna pravila
- Objekt
Mathvsebuje matematične konstante in metode. - Lastnosti in metode objekta
Mathuporabljamo neposredno prek imenaMath. - Za zaokroževanje uporabljamo različne metode glede na želeno pravilo.
- Trigonometrične metode sprejemajo kote v radianih.
- Metoda
Math.random()vrne psevdonaključno število med0in1, pri čemer1ni vključena.
Primerjave
Osnovno o objektu Math
Objekt Math vsebuje statične lastnosti in metode za matematične izračune. Ne ustvarjamo objektov tega tipa, ampak vse uporabljamo neposredno prek objekta Math.
Zanimivost: Objekt Math v JavaScriptu deluje kot imenski prostor za matematične funkcije in konstante, ne pa kot običajen konstruktor za ustvarjanje novih objektov.
Matematične konstante
Objekt Math vsebuje več uporabnih konstant. Med najpogosteje uporabljenimi sta Math.PI in Math.E.
| Konstanta | Opis | Vrednost |
|---|---|---|
Math.E |
Osnova naravnega logaritma. | 2.718281828459045 |
Math.PI |
Razmerje med obsegom kroga in premerom. | 3.141592653589793 |
Math.SQRT2 |
Kvadratni koren iz 2. |
1.4142135623730951 |
Math.SQRT1_2 |
Kvadratni koren iz 1/2. |
0.7071067811865476 |
Math.LN2 |
Naravni logaritem števila 2. |
0.6931471805599453 |
Math.LN10 |
Naravni logaritem števila 10. |
2.302585092994046 |
Math.LOG2E |
Logaritem števila e pri osnovi 2. |
1.4426950408889634 |
Math.LOG10E |
Logaritem števila e pri osnovi 10. |
0.4342944819032518 |
Zaokroževanje
Za zaokroževanje v JavaScriptu uporabljamo več različnih metod. Pomembno je, da med njimi ločimo, saj ne izvajajo enakega zaokroževanja.
| Metoda | Opis |
|---|---|
Math.round(x) |
Vrne številu x najbližje celo število. |
Math.ceil(x) |
Vrne najmanjše celo število, ki je večje ali enako številu x. |
Math.floor(x) |
Vrne največje celo število, ki je manjše ali enako številu x. |
Math.trunc(x) |
Odstrani decimalni del števila in vrne njegov celoštevilski del. |
<button type="button" onclick="primerZaokrozevanje()">Zaokroži število</button>
<p id="primer1"></p>
<script>
function primerZaokrozevanje() {
document.getElementById("primer1").innerHTML =
"Math.round(2.5): " + Math.round(2.5) + "<br>" +
"Math.ceil(2.3): " + Math.ceil(2.3) + "<br>" +
"Math.floor(2.8): " + Math.floor(2.8) + "<br>" +
"Math.trunc(2.8): " + Math.trunc(2.8) + "<br>" +
"Math.floor(-2.3): " + Math.floor(-2.3) + "<br>" +
"Math.trunc(-2.3): " + Math.trunc(-2.3);
}
</script>
Pozor: Metodi Math.floor() in Math.trunc() pri negativnih številih ne vrneta enakega rezultata. Na primer Math.floor(-2.3) vrne -3, Math.trunc(-2.3) pa -2.
Minimum, maksimum in absolutna vrednost
Pri primerjavah števil pogosto uporabljamo metode Math.min(), Math.max(), Math.abs() in Math.sign().
| Metoda | Opis |
|---|---|
Math.min(...) |
Vrne najmanjše izmed podanih števil. |
Math.max(...) |
Vrne največje izmed podanih števil. |
Math.abs(x) |
Vrne absolutno vrednost števila x. |
Math.sign(x) |
Vrne predznak števila x. |
<p id="primer2"></p>
<script>
document.getElementById("primer2").innerHTML =
"Math.min(4, 8, -2, 10): " + Math.min(4, 8, -2, 10) + "<br>" +
"Math.max(4, 8, -2, 10): " + Math.max(4, 8, -2, 10) + "<br>" +
"Math.abs(-9): " + Math.abs(-9) + "<br>" +
"Math.sign(-9): " + Math.sign(-9);
</script>
Potence in koreni
Za potenciranje in korenjenje uporabljamo Math.pow() in Math.sqrt(). V sodobni kodi za potenciranje pogosto uporabljamo tudi operator **, vendar je Math.pow() še vedno povsem veljavna rešitev.
<p id="primer3"></p>
<script>
document.getElementById("primer3").innerHTML =
"Math.pow(2, 3): " + Math.pow(2, 3) + "<br>" +
"2 ** 3: " + (2 ** 3) + "<br>" +
"Math.sqrt(81): " + Math.sqrt(81);
</script>
Naključna števila
Metoda Math.random() vrne psevdonaključno realno število, ki je večje ali enako 0 in strogo manjše od 1. Tako vrednost lahko prilagodimo za izpis števil v želenem območju.
<button type="button" onclick="nakljucno()">Generiraj naključno število</button>
<button type="button" onclick="nakljucnoCelo()">Generiraj celo število od 1 do 10</button>
<p id="primer4"></p>
<script>
function nakljucno() {
document.getElementById("primer4").innerHTML = Math.random();
}
function nakljucnoCelo() {
const stevilo = Math.floor(Math.random() * 10) + 1;
document.getElementById("primer4").innerHTML = stevilo;
}
</script>
Pozor: Metoda Math.random() ni kriptografsko varna. Ni primerna za gesla, varnostne žetone ali druge varnostno občutljive naloge. Za takšne primere uporabimo Web Crypto API.
Trigonometrija
Trigonometrične metode, kot so Math.sin(), Math.cos() in Math.tan(), sprejemajo kot v radianih. Če želimo uporabiti stopinje, jih moramo najprej pretvoriti v radiane.
<p id="primer5"></p>
<script>
const kotStopinje = 60;
const kotRadiani = kotStopinje * Math.PI / 180;
document.getElementById("primer5").innerHTML =
"sin(60°): " + Math.sin(kotRadiani) + "<br>" +
"cos(60°): " + Math.cos(kotRadiani);
</script>
Priporočila
- Pri zaokroževanju vedno izberi metodo glede na natančno pravilo, ki ga potrebuješ.
- Za naključna cela števila jasno določi območje in uporabi ustrezno kombinacijo
Math.random()inMath.floor(). - Pri trigonometričnih funkcijah vedno preveri, ali je kot podan v radianih.
- Za potenciranje v sodobni kodi lahko uporabiš tudi operator
**. - Za varnostno občutljive naključne vrednosti ne uporabljaj
Math.random().
Pogoste napake
- Objekt
Mathse obravnava kot običajen konstruktor, čeprav je namenjen neposredni uporabi statičnih lastnosti in metod. - Metode
Math.floor(),Math.ceil(),Math.round()inMath.trunc()se obravnavajo kot enakovredne, čeprav vračajo različne rezultate. - Pri ustvarjanju naključnih celih števil ni pravilno določeno območje vrednosti.
- Trigonometrične funkcije se uporabljajo s stopinjami, čeprav pričakujejo radiane.
- Metoda
Math.random()se uporablja za varnostne naloge, čeprav ni namenjena kriptografsko varnemu naključju.