Načrtovanje in razvoj spletnih aplikacij

Objekt Math

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 Math vsebuje matematične konstante in metode.
  • Lastnosti in metode objekta Math uporabljamo neposredno prek imena Math.
  • 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 med 0 in 1, pri čemer 1 ni 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() in Math.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 Math se obravnava kot običajen konstruktor, čeprav je namenjen neposredni uporabi statičnih lastnosti in metod.
  • Metode Math.floor(), Math.ceil(), Math.round() in Math.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.