Dijeljenje po modulu javascript. Aritmetičke operacije u JavaScriptu

Jeste li upoznati s aritmetikom? Znate li zbrajati i oduzimati brojeve? JavaScript također može zbrajati i oduzimati. JavaScript ima sljedeće operatore: zbrajanje +, oduzimanje -, dijeljenje /, množenje *, dijeljenje s ostatkom %.

Var jedan = 121;
var dva = 13;
upozorenje (jedan + dva);
uzbuna (jedan - dva);
upozorenje (jedan * dva);
upozorenje (jedan / dva);
upozorenje(jedan % dva);

Zakomplicirajmo primjer 1

Promjenljivi odgovor = ((121 - 12) * 103) + 200;
upozorenje (odgovor);

Zakomplicirajmo primjer 2

VarPI = 3,14;

upozorenje (odgovor);

I zakomplicirajmo treći primjer

VarPI = 3,14;
var odgovor = ((121 - 12) * 103) + PI;
var answerEnd = (2 * odgovor * PI) + (-100);
upozorenje(kraj odgovora);

A čak se i ovo može učiniti

Promjenjivi odgovor = 101 + (-(-100));
upozorenje (odgovor);

Ali to je besmislica u usporedbi s onim što JavaScript može. U tu svrhu postoji standardni matematički objekt s mnogo svojstava (svojstva su operacije, u ovom kontekstu).

Math.pow(2, 53) /* -> 2 na potenciju od 53 */
Math.round(0.6) /* -> 1.0 - zaokruži na najbliži cijeli broj */
Math.ceil(0.6) /* -> 1.0 - zaokruži */
Math.floor(0.6) /* -> 0.0 - zaokruži prema dolje */
Math.abs(-5) /* -> 5 - modul, apsolutna vrijednost */
Math.max(x, y, z) /* -> Vraća najveći argument */
Math.min(x, y, z) /* -> Vraća najmanji argument */
Math.random(); /* -> Gdje je izlazni broj veći od 0, ali manji od 1 */
Math.PI /* -> Pi */
Math.E /* -> Baza prirodnog logaritma */
Math.sqrt(3) /* -> Kvadratni korijen od 3 */
Math.pow(3, 1/3) /* -> Kubni korijen od 3 */
Math.sin(0) /* -> Trigonometrija: tu su i Math.cos, Math.atan i drugi */
Math.log(10) /* -> Prirodni logaritam 10 */
Math.log(100) / Math.LN10 /* -> Logaritam od 100 baza 10 */
Math.log(512) / Math.LN2 /* -> Logaritam od 512 baza 2 */
Math.exp(3) /* -> Math.E cubed */

Kako koristiti objekt Math?

/* Prvi primjer */
var twoInPow = Math.pow(2, 53);
upozorenje(twoInPow);
/* Drugi primjer */
var valueRaund = 0,1312;
var answerRaunt = Math.round(valueRaund);
upozorenje(odgovorRaunt);
/* Treći primjer */
var valueRaund = 0,1312;
upozorenje(Math.round(valueRaund));
/* Četvrti primjer: pronalaženje najvećeg od tri broja */
var a = 12, b = 11, c = 10;
upozorenje(Math.max(a, b, c));

U slučaju izvan raspona, gubitka značajnih znamenki ili dijeljenja s nulom, JavaScript ne izbacuje pogrešku. Ako je rezultat prevelik i izvan raspona, tada će se vratiti posebna vrijednost "beskonačno", izgleda ovako "Beskonačno".

Gubitak značajnih znamenki: Rezultat aritmetičke operacije je vrlo blizu nule. Ako je došlo do gubitka, vraća se 0 (nula).

Globalna varijabla NaN znači "nije broj". Postoji jedna osobitost ove varijable: operacija testa jednakosti (==) uvijek vraća negativan rezultat, čak i ako se uspoređuje sa samom sobom.

/* Ne možeš tako pisati */
if (x == NaN) ( ... )

Kako biste odredili je li vrijednost varijable x NaN vrijednost, morate upotrijebiti donju konstrukciju. Ova provjera će biti istinita samo ako je x jednako NaN


Aritmetički operatori i pretvaranje tipa

JavaScript podržava sljedeće aritmetičke operatore:

Zanimljiva značajka JavaScripta je mogućnost izvođenja aritmetičkih operacija na varijablama različite vrste. U ovom slučaju, tumač sam izvodi pretvaranje tipa i izvodi navedenu operaciju. U procesu održavanja tipa koriste se sljedeća pravila:

1. Ako je jedan od operanda niz, tada se svi ostali operandi pretvaraju u oblik niza.

Var1 = "Ujak" var2 = "Vanya" rezultat = var1 + " " + var2 // rezultat = "Ujak Vanja" mixed = var2 + 100 // mixed = "Vanya100"

2. Svi logički operandi se pretvaraju u numerički oblik, osim kada su svi operandi u izrazu logični. U ovom slučaju, true se smanjuje na "1", a false - na "0". Kada se logički operandi kombiniraju s nizovima, svi se operandi pretvaraju u tekstualni oblik.

Var1 = točno var2 = istinit rezultat = var1 + var2 // rezultat = 2 miješano = var2 + 100 // miješano = 101 var3 = "string:" str = var3 + var1 // str = "string:true"

3. Ako konverzija tipa ne uspije, rezultat izraza bit će "NaN" (na primjer, kada pokušavate podijeliti niz u nešto).

Var1 = "Ujak" var2 = "Vanya" rezultat = var1 / var2 // rezultat = "NaN" mixed = var2 * true // mixed = "NaN"

Međutim, u početnoj fazi bolje je suzdržati se od tipova lijevanja i trikova s ​​transformirajućim rezultatima. To će vas spasiti od značajnog broja pogrešaka.

Matematički objekt

Objekt Math sadrži osnovne matematičke konstante i standard matematičke funkcije. Najčešće korišteni prikazani su u tablici:

Svojstva
LN10 Vrijednost prirodnog logaritma broja 10
LN2 Vrijednost prirodnog logaritma broja 2
P.I. Pi vrijednost
Metode
trbušnjaci (broj) Vraća apsolutnu vrijednost broja (tj. broj bez uzimanja u obzir predznaka)
prag (broj) Zaokružuje broj na najbliži viši cijeli broj (zaokružuje)
iskustvo (broj) Vraća broj "e" na potenciju "broja"
kat (broj) Zaokružuje broj na najbliži manji cijeli broj (zaokružuje prema dolje)
max(broj1, broj2) Vraća veći od dva broja
min(broj1, broj2) Vraća manji od dva broja
pow(broj1, broj2) Vraća "broj1" podignut na potenciju "broj2"
nasumično() Vraća nasumični broj u rasponu od 0 do 1
krug (broj) Zaokružuje broj prema standardnim pravilima zaokruživanja
sqrt(broj) Vraća kvadratni korijen broja.

Od svih navedenih funkcija ima smisla dodatno objasniti samo ceil(), floor() i round(). Pogledajmo njihove razlike na primjeru:

Num = 1,222 // najbliži cijeli broj "dolje" je 1 // najbliži cijeli broj "gore" je 2 // aritmetički zaokruženo na 1 upozorenje(Math.ceil(num)) upozorenje(Math.floor(num)) upozorenje(Math.round (num)) // dobivamo tri poruke: 2, 1, 1 num = 1.777 // najbliži cijeli broj "dolje" je 1 // najbliži cijeli broj "gore" je 2 // aritmetički zaokruženo na 2 alert(Math.ceil (num) ) alert(Math.floor(num)) alert(Math.round(num)) // dobivanje tri poruke: 2, 1, 2

Matematički set JavaScript funkcije omogućuje vam rješavanje prilično širokog spektra problema, ali ne biste ga trebali zlorabiti. Ne zaboravite da kod izvršava tumač, ali nema pitanja o niskoj razini optimizacije izračuna, dakle visoke performanse bit će vrlo teško postići.

Operatori: - (oduzimanje), + (zbrajanje), * (množenje) i / (dijeljenje) rade potpuno isto kao aritmetičke operacije u matematici. Operator % ( dijeljenje s ostatkom) vraća ostatak kada se prvi operand podijeli s drugim. Rezultat dijeljenja s ostatkom imat će isti predznak kao prvi operand:

Upozorenje(10 + 2); // 12 upozorenje(10 - 2); // 8 upozorenje(10 * 2); // 20 upozorenje(10 / 2); // 5 upozorenje(5 % 2); // 1 upozorenje(-5 % 2); // -1

Operater ** ( potenciranje) ima dva operanda. Prvi operand je baza potencije, drugi operand je eksponent, tako da operator vraća bazu podignutu na navedenu potenciju:

2 ** 4; // 16

Svi matematički operatori pretvaraju svoje operande koristeći ista pravila kao i funkcija Number().

Unarni + (plus) i - (minus)

Operator + (unarni plus) pretvara vrijednost svog operanda u broj i vraća pretvorenu vrijednost. Kada se koristi s numeričkim operandom, ne radi ništa:

Var x = +"5";

Operator - (unarni minus) pretvara vrijednost svog operanda u broj ako je potrebno, a zatim čini broj negativnim:

Var x = -5 + 3;

Unarni plus i minus pretvaraju svoje operande prema istim pravilima kao i funkcija Number().

Inkrement i dekrement

Operator ++ (inkrement) povećava vrijednost svog operanda za jedan. Ako vrijednost operanda nije broj, operator je automatski pretvara u broj, povećava za jedan i vraća rezultat koji se ponovno dodjeljuje operandu.

Inkrement ima dva oblika - postfiks (operator se stavlja iza operanda) i prefiks (operator se stavlja ispred operanda). Ako se koristi u postfiksnom obliku, onda se prvi vraća izvorna vrijednost operanda, a tek tada se vrijednost operanda povećava za jedan.

Vrlo često izračuni u JavaScriptu ne daju točno rezultate koje želimo. Naravno, s brojevima možemo raditi što god želimo - zaokruživati ​​prema gore ili dolje, postavljati raspone, odrezati nepotrebne brojeve na određeni broj decimalnih mjesta, sve ovisi o tome što s tim brojem želite raditi u budućnosti.

Zašto je potrebno zaokruživanje?

Jedan od zanimljivih aspekata JavaScripta je da on zapravo ne pohranjuje cijele brojeve, mi odmah radimo s brojevima s pomičnim zarezom. Ovo, u kombinaciji s činjenicom da se mnoge frakcijske vrijednosti ne mogu izraziti u konačnom broju decimalnih mjesta, u JavaScriptu možemo dobiti rezultate poput ovih:

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
U praktične svrhe, ova netočnost nije bitna, u našem slučaju govorimo o pogrešci u kvintilijunskim dijelovima, no to bi neke moglo razočarati. Također možemo dobiti pomalo čudne rezultate kada radimo s brojevima koji predstavljaju valute, postotke ili veličine datoteka. Da bismo ispravili ove netočnosti, samo trebamo moći zaokružiti rezultate, a dovoljno je postaviti decimalnu preciznost.

Zaokruživanje brojeva ima praktičnu primjenu, možemo manipulirati brojem unutar određenog raspona, na primjer, želimo zaokružiti vrijednost na najbliži cijeli broj umjesto da radimo samo s decimalnim dijelom.

Zaokruživanje decimalnih brojeva

Kako bi odsjekao decimalni broj, koristite metodu toFixed ili toPrecision. Oba uzimaju jedan argument koji određuje koliko značajnih znamenki (to jest, ukupan broj znamenki korištenih u broju) ili decimalnih mjesta (broj nakon decimalne točke) rezultat treba sadržavati:
  1. Ako argument nije definiran za toFixed(), tada će biti postavljen na nulu, što znači da argument ima 0 decimalnih mjesta maksimalna vrijednost, jednako 20.
  2. Ako toPrecision nema argumenta, broj ostaje netaknut
neka je randNum = 6,25; randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" randNum = 87,335; randNum.toFixed(2); > "87,33" randNum = 87,337; randNum.toPrecision(3); > "87,3"
Obje metode toFixed() i toPrecision() vraćaju prikaz niza rezultata, a ne broj. To znači da će pri zbrajanju zaokružene vrijednosti s randNum proizvesti ulančavanje nizova umjesto zbroja brojeva:

Neka je randNum = 6,25; pusti zaokruženo = randNum.toFixed(); // "6" console.log(randNum + rounded); > "6.256"
Ako želite da rezultat bude numerički tip podataka, tada ćete morati koristiti parseFloat:

Neka je randNum = 6,25; let rounded = parseFloat(randNum.toFixed(1)); console.log(zaokruženo); > 6.3
Imajte na umu da su vrijednosti 5 zaokružene osim u rijetkim slučajevima.

Metode toFixed() i toPrecision() korisne su jer ne samo da mogu odrezati razlomak, već i dodati decimalna mjesta, što je zgodno kada radite s valutom:

Neka cijeliNum = 1 neka dolaraCenti = cijeliNum.toFixed(2); console.log(dolarsCents); > "1,00"
Imajte na umu da će toPrecision proizvesti rezultat u znanstvenom zapisu ako je broj cijelih brojeva veći od same preciznosti:

Neka je num = 123.435 num.toPrecision(2); > "1.2e+2"

Kako izbjeći pogreške zaokruživanja s decimalama

U nekim slučajevima toFixed i toPrecision zaokružuju vrijednost 5 prema gore i prema dolje:

Neka je numTest = 1,005; numTest.toFixed(2); > "1,00"
Rezultat gornjeg izračuna trebao je biti 1,01, a ne 1. Ako želite izbjeći sličnu pogrešku, možemo upotrijebiti rješenje koje je predložio Jack L Moore, a koje za izračun koristi eksponencijalne brojeve:

Funkcija round(vrijednost, decimale) ( return Broj(Math.round(value+"e"+decimale)+"e-"+decimale); )
Sada:

Okrugli (1.005,2); > 1.01
Ako želite robusnije rješenje od gore prikazanog, možete otići na MDN.

Strojno ipsilon zaokruživanje

Alternativna metoda zaokruživanja decimalnih brojeva uvedena je u ES6. Strojno epsilon zaokruživanje daje razumnu marginu pogreške pri usporedbi dva broja s pomičnim zarezom. Bez zaokruživanja, usporedbe mogu dati rezultate slične sljedećim:

0,1 + 0,2 === 0,3 > netočno
Koristimo Math.EPSILON u našoj funkciji da bismo dobili valjanu usporedbu:

Funkcija epsEqu(x, y) ( return Math.abs(x - y)< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }
Funkcija prima dva argumenta: prvi je trenutni izračun, drugi je očekivani rezultat. Vraća usporedbu to dvoje:

EpsEqu(0,1 + 0,2, 0,3) > točno
Svi moderni preglednici već podržavaju ES6 matematičke funkcije, ali ako želite podršku u preglednicima kao što je IE 11, koristite polyfills.

Obrezivanje frakcijskog dijela

Sve gore navedene metode mogu zaokružiti na decimalne brojeve. Da biste jednostavno srezali broj na dvije decimale, prvo ga morate pomnožiti sa 100, a zatim dobiveni rezultat podijeliti sa 100:

Funkcija truncated(num) ( return Math.trunc(num * 100) / 100; ) truncated(3.1416) > 3.14
Ako želite prilagoditi metodu bilo kojem broju decimalnih mjesta, možete upotrijebiti bitnu dvostruku negaciju:

Funkcija truncated(num, decimalPlaces) ( let numPowerConverter = Math.pow(10, decimalPlaces); return ~~(num * numPowerConverter)/numPowerConverter; )
Sada:

Neka je randInt = 35,874993; skraćeno(randInt,3); > 35.874

Zaokružite na najbliži broj

Za zaokruživanje decimalnog broja na najbliži broj gore ili dolje, što god smo najbliže, upotrijebite Math.round():

Math.round(4.3) > 4 Math.round(4.5) > 5
Imajte na umu da se "polovica vrijednosti", 0,5, zaokružuje prema matematičkim pravilima.

Zaokružite prema dolje na najbliži cijeli broj

Ako želite uvijek zaokruživati ​​prema dolje, koristite Math.floor:

Math.floor(42.23); > 42 Math.floor(36.93); > 36
Imajte na umu da zaokruživanje naniže funkcionira za sve brojeve, uključujući negativne brojeve. Zamislite neboder s beskonačnim brojem katova, uključujući katove na donjoj razini (koji predstavljaju negativne brojeve). Ako ste u dizalu na najnižoj razini između 2 i 3 (što predstavlja vrijednost od -2,5), Math.floor će vas odvesti do -3:

Math.floor(-2,5); > -3
Ali ako želite izbjeći ovu situaciju, koristite Math.trunc, koji je podržan u svim moderni preglednici(osim IE/Edge):

Math.trunc(-41,43); > -41
Na MDN-u ćete pronaći polifill koji će pružiti podršku za Math.trunc u preglednicima i IE/Edge.

Zaokružite na najbliži cijeli broj

S druge strane, ako uvijek trebate zaokružiti, koristite Math.ceil. Opet, zapamtite beskonačni lift: Math.ceil će uvijek ići "gore", bez obzira je li broj negativan ili ne:

Math.ceil(42.23); > 43 Math.ceil(36.93); > 37 Math.ceil(-36.93); > -36

Zaokruživanje gore/dole na traženi broj

Ako želimo zaokružiti na najbliži višekratnik od 5, najlakši način je stvoriti funkciju koja dijeli broj s 5, zaokružuje ga i zatim množi s istim iznosom:

Funkcija roundTo5(num) ( return Math.round(num/5)*5; )
Sada:

Zaokruži na 5(11); > 10
Ako želite zaokružiti na višekratnike svoje vrijednosti, koristimo općenitiju funkciju, prosljeđujući početnu vrijednost i višekratnik:

Funkcija roundToMultiple(num, multiple) ( return Math.round(num/multiple)*multiple; )
Sada:

Neka je početniBroj = 11; neka je višestruko = 10; zaokružiNaViše(početniBroj, višestruko); > 10;

Popravljanje broja u rasponu

Postoji mnogo slučajeva u kojima želimo dobiti vrijednost x koja se nalazi unutar raspona. Na primjer, možda će nam trebati vrijednost između 1 i 100, ali završili smo s vrijednošću 123. Da bismo to popravili, možemo koristiti min (vraća najmanji skup brojeva) i max (vraća najveći skup brojeva brojeva). U našem primjeru, raspon je od 1 do 100:

Neka je niska granica = 1; neka je visoka granica = 100; neka je numInput = 123; let clamped = Math.max(lowBound, Math.min(numInput, highBound)); konzola.log(stegnut); > 100;
Opet, možemo ponovno upotrijebiti operaciju i zamotati cijelu stvar u funkciju, koristeći rješenje koje je predložio Daniel X. Moore:

Number.prototype.clamp = function(min, max) ( return Math.min(Math.max(this, min), max); );
Sada:

NumInput.clamp(lowBound, highBound); > 100;

Gaussovo zaokruživanje

Gaussovo zaokruživanje, također poznato kao bankovno zaokruživanje, uključuje zaokruživanje na najbliži paran broj. Ova metoda zaokruživanja funkcionira bez statističke pogreške. Najbolja odluka je predložio Tim Down:

Funkcija gaussRound(num, decimalPlaces) ( neka d = decimalPlaces || 0, m = Math.pow(10, d), n = +(d ? num * m: num).toFixed(8), i = Math.floor (n), f = n - i, e = 1e-8, r = (f > 0,5 - e && f< 0.5 + e) ? ((i % 2 == 0) ? i: i + 1) : Math.round(n); return d ? r / m: r; }
Sada:

GaussRound(2,5) > 2 GaussRound(3,5) > 4 GaussRound(2,57,1) > 2,6
Decimala u CSS-u:

Budući da se JavaScript često koristi za stvaranje pozicijskih mapiranja za HTML elemente, možda se pitate što bi se dogodilo da generiramo decimalne vrijednosti za naše elemente:

#box ( width: 63.667731993px; )
Dobra vijest je da će moderni preglednici poštovati decimalne vrijednosti u blok modelu, uključujući postotak ili pikselske jedinice.

Sortiranje

Vrlo često moramo razvrstati neke elemente, na primjer, imamo niz zapisa igara, a oni moraju biti organizirani silaznim redoslijedom ranga igrača. Nažalost, standardna metoda sort() ima neka iznenađujuća ograničenja: dobro radi s uobičajenim engleskim riječima, ali se odmah pokvari kada naiđe na brojeve, jedinstvene znakove ili velike riječi.

Sortiranje po abecedi

Čini se da bi sortiranje niza po abecedi trebao biti jednostavan zadatak:

Let fruit = ["butternut squash", "apricot", "cantaloupe"]; voće.sort(); > "marelica", "butternut squash", "cantaloupe"]
Međutim, nailazimo na problem čim je jedan od elemenata napisan velikim slovima:

Let fruit = ["butternut squash", "apricot", "Cantalope"]; voće.sort(); > "dinja", "marelica", "butternut squash"]
To je zato što, prema zadanim postavkama, sorter uspoređuje prvi znak predstavljen u Unicodeu. Unicode je jedinstveni kod za bilo koji znak, bez obzira na platformu, bez obzira na program, bez obzira na jezik. Na primjer, ako pogledate tablicu kodova, znak "a" ima vrijednost U+0061 (u heksadecimalnom obliku 0x61), dok znak "C" ima kod U+0043 (0x43), koji dolazi ranije u Unicodeu tablicu nego znak "a".

Da bismo razvrstali niz koji može sadržavati mješovita prva slova, moramo sve elemente privremeno pretvoriti u mala slova ili definirati naš redoslijed sortiranja pomoću metode localeCompare() s nekim argumentima. U pravilu je za takav slučaj bolje odmah stvoriti funkciju za ponovnu upotrebu:

Funkcija alphaSort(arr) ( arr.sort(function (a, b) ( return a.localeCompare(b, "en", ("sensitivity": "base")); )); ) let fruit = ["butternut squash" ", "marelica", "Dinja"]; alphaSort(voće) >
Ako želite da je niz poredan obrnutim abecednim redom, jednostavno zamijenite položaje a i b u funkciji:

Funkcija alphaSort(arr) ( arr.sort(function (a, b) ( return b.localeCompare(a, "en", ("sensitivity": "base")); )); ) let fruit = ["butternut squash" ", "marelica", "Dinja"]; alphaSort(voće) > ["Cantaloupe", "butternut squash", "apricot"]
Ovdje je vrijedno napomenuti da se localeCompare koristi s argumentima, također moramo zapamtiti da ga podržava IE11+, za starije verzije IE-a, možemo ga koristiti bez argumenata, i malim slovima:

Funkcija caseSort(arr) ( arr.sort(funkcija (a, b) ( return a.toLowerCase().localeCompare(b.toLowerCase()); )); ) let fruit = ["butternut squash", "apricot", "Dinja"]; caseSort(fruit) > ["apricot", "butternut squash", "Cantaloupe"]

Numeričko sortiranje

Sve se to ne odnosi na primjer o kojem smo govorili gore o nizu zapisa igre. S nekim numeričkim nizovima razvrstavanje funkcionira sasvim dobro, ali u nekom trenutku rezultat može biti nepredvidiv:

Neka HighScores = ; highScores.sort(); >
Stvar je u tome što metoda sort() izvodi leksikografsku usporedbu: što znači da će se brojevi pretvoriti u niz, a usporedbe će se opet napraviti podudaranjem prvog znaka tog niza u redoslijedu znakova u Unicode tablici . Stoga ponovno moramo definirati naš redoslijed sortiranja:

Neka HighScores = ; highScores.sort(function(a,b) ( return a - b; )); >
Opet, za sortiranje brojeva obrnutim redoslijedom, zamijenite položaje a i b u funkciji.

Razvrstavanje strukture slične JSON-u

I konačno, ako imamo strukturu podataka sličnu JSON-u predstavljenu kao niz zapisa igre:

Neka rezultati = [ ( "ime": "Daniel", "rezultat": 21768), ( "ime": "Michael", "rezultat": 33579), ( "ime": "Alison", "rezultat": 38395 )];
U ES6+ možete koristiti funkcije strelica:

Scores.sort((a, b) => b.score - a.score));
Za starije preglednike koji nemaju ovu podršku:

Scores.sort(function(a, b) ( return a.score - b.score ));
Kao što vidite, sortiranje u JavaScriptu je prilično nejasna stvar, nadam se da će vam ovi primjeri nekako olakšati život.

Rad s funkcijama snage

Potenciranje je operacija koja je izvorno definirana kao rezultat uzastopnog množenja prirodnog broja samim sobom; kvadratni korijen od a je broj koji daje a kada se kvadrira. Mogli bismo stalno koristiti ove funkcije Svakidašnjica na satovima matematike, uključujući izračunavanje površina, volumena ili čak fizičkog modeliranja.

U JavaScriptu je funkcija stepena predstavljena kao Math.pow(), au novom ES7 standardu uveden je novi operator stepenovanja - " * * ".

Potenciranje

Da biste podigli broj na n-tu potenciju, upotrijebite funkciju Math.pow(), gdje je prvi argument broj koji će biti podignut na potenciju, a drugi argument je eksponent:

Math.pow(3,2) > 9
Ovaj oblik zapisa znači 3 na kvadrat, ili 3 × 3, što dovodi do rezultata 9. Može se dati još jedan primjer, naravno:

Math.pow(5,3); > 125
To jest, 5 kubnih, ili 5 × 5 × 5, jednako je 125.

ECMAScript 7 je sljedeća verzija JavaScripta, u načelu, možemo koristiti novi predloženi operator stepenovanja - * *, ovaj oblik notacije može biti opisniji:

3 ** 2 > 9
Na ovaj trenutak Podrška za ovog operatera je prilično ograničena, stoga se ne preporučuje njegovo korištenje.

Funkcija napajanja može biti korisna u većini različite situacije. Jednostavan primjer, izračunavanje broja sekundi u satu: Math.pow (60,2).

Kvadratni i kubni korijeni

Math.sqrt() i Math.cbrt() su suprotni od Math.pow(). Kao što se sjećamo, kvadratni korijen od a je broj koji daje a kada se kvadrira.

Math.sqrt(9) > 3
U isto vrijeme, kubni korijen od a je broj koji daje a kada se podigne na kub.

Math.cbrt(125) > 5
Math.cbrt() tek je nedavno uveden u specifikaciju JavaScripta i stoga je podržan samo u modernim preglednicima: Chrome 38+, Firefox i Opera 25+ i Safari 7.1+. Primijetit ćete to Internet Explorer nije na ovom popisu, ali pronaći ćete polifil na MDN-u.

Primjeri

Naravno, možemo koristiti necijele vrijednosti u jednoj od ovih funkcija:

Math.pow(1.25, 2); > 1,5625 Math.cbrt(56,57) > 3,8387991760286138
Imajte na umu da ovo također dobro funkcionira kada koristite negativne vrijednosti argumenata:

Math.pow(-5,2) > 25 Math.pow(10,-2) > 0,01
Međutim, ovo neće raditi za kvadratni korijen:

Math.sqrt(-9) > NaN
Iz matematičke analize znamo da se imaginarni broj odnosi na kvadratni korijen negativnih brojeva. I ovo nas može dovesti do druge tehnike za rad sa kompleksnim brojevima, ali to je druga priča.

Možete koristiti razlomke u Math.pow() da pronađete kvadratne i kubne korijene brojeva. Kvadratni korijen koristi eksponent od 0,5:

Math.pow(5, 0,5); // = Math.sqrt(5) = 5 ** (1/2) > 2,23606797749979
Međutim, zbog hirova pomičnog zareza, ne možete točno pogoditi točan rezultat:

Math.pow(2,23606797749979,2) > 5,000000000000001
U takvim situacijama morat ćete pribjeći odsijecanju znakova iz broja ili zaokruživanju na neku vrijednost.

Neki ljudi, iz nepoznatih razloga, u JavaScriptu brkaju funkciju Math.pow() s Math.exp(), koja je eksponencijalna funkcija za brojeve općenito. Napomena: u Engleski jezik"exponent" se prevodi kao "eksponent", pa je vjerojatnije da se ovo odnosi na govornike engleskog jezika, iako postoje alternativni nazivi za eksponent, kao što su indeks, snaga.

Matematičke konstante

Rad s matematikom u JavaScriptu olakšan je brojnim ugrađenim konstantama. Ove konstante su svojstva objekta Math. Vrijedno je napomenuti da su konstante napisane velikim slovima, a ne CamelCase zapisom.

U anketi mogu sudjelovati samo registrirani korisnici. , molim te.

Oznake: Dodajte oznake

Podsjećam vas da ovo uvodni JavaScript tečaj za početnike. Danas ćemo pogledati što operateri postojati u JavaScriptu. Zavežite pojaseve! Bit će puno bukafa.

Kada imate hrpu podataka, morate nešto učiniti s njima. Operateri su zauzeti poslom. Uvijek zbrajaju, množe, dijele, oduzimaju, uspoređuju, prisvajaju i što već rade. Bez operatora u programiranju jednostavno ne možete kuhati kašu.

U JavaScriptu se koriste sljedeće vrste operatora:

  • Aritmetički operatori
  • Operatori dodjele
  • Operatori usporedbe
  • Logički operatori
  • String operatori
  • Uvjetne izjave

Ovo je daleko od toga puni popis, ali za početak, ovo je dovoljno za oči. Pogledajmo svaku predstavljenu vrstu operatora, zašto su potrebni i za što se koriste. Ići!

Aritmetički operatori u JavaScriptu

Svi ste od škole upoznati s aritmetičkim operatorima. Ovo su uobičajeni znakovi za zbrajanje, oduzimanje, dijeljenje i množenje: + , - , / , * . Sukladno tome, oni obavljaju iste funkcije u programiranju kao iu običnoj matematici. S ovim nećete imati nikakvih poteškoća.

Podaci s kojima operateri rade nazivaju se operandi.

2 + 3 // ovdje su brojevi 2 i 3 operandi, a znak + je operator zbrajanja

Kao i u matematici, aritmetički operatori imaju svoje prioritete: množenje i dijeljenje imaju veći prioritet od zbrajanja i oduzimanja.

2 + 3 * 4 // ovdje se prvo izvodi množenje, a tek onda zbrajanje

I baš kao u matematici, zagrade se aktivno koriste za promjenu prioriteta:

(2 + 3) * 4 // ovdje se prvo izvodi zbrajanje, a zatim množenje

Usput, znak = je također operator. Kao što smo već saznali u članku o , ovo je operator dodjele, a ne znak jednakosti. Ne zaboravite na to!

Operator modulnog dijeljenja

Sada pogledajmo još zanimljivih aritmetičkih operatora. A prva ikona bit će ikona postotka - %. U JavaScriptu to uopće nisu postoci riječi. Tako se u programiranju označava modulo dijeljenje. Rezultat takve operacije bit će ostatak podjele. Na primjer:

100% 22 // ostatak će biti 12
100% 10 // ostatak će biti 0

U izračunima ovaj operator ima isti prioritet kao množenje i dijeljenje, stoga ne zaboravite staviti zagrade.

Kombinirajući operatori

Operator = može se i treba kombinirati s drugim operatorima kako bi se skratio zapis. Primjer:

promjen. n = 2; // dodijeli varijabli n vrijednost 2
n = n + 3; // dodijeliti varijabli n novu vrijednost n + 2, dobiti 5

Ista stvar se može napisati ovako:

promjen. n = 2;
n += 3; // ekvivalentno pisanju n = n + 3

Operatori inkrementiranja ++ i dekrementiranja – ​​–

Među aritmetičkim operatorima postoji nekoliko vrlo zanimljivih - prirast I smanjenje. Označeni su redom ++ i ––. Prvi povećava varijablu za jedan, a drugi smanjuje. Ova se značajka vrlo često koristi u programiranju jer pruža mnogo pogodnosti. Najčešće se može naći u uvjetnim izrazima, ali više o tome kasnije.

Oba operatora imaju određeno mjesto u zapisu. Mogu biti kao prefiks oblik (ispred varijable) ++n , i in postfiks(iza varijable) n++ . Razlika je ogromna! Nikada nemojte brkati ove oblike i dobro ih zapamtite. Ako se ovi operatori pojave ispred varijable, onda kao rezultat povećavaju njezinu vrijednost za 1. Ali! Ako dolaze nakon varijable, vraćaju izvornu vrijednost. Primjer:

var n = 2, m = 0;
m = ++n // povećava n za 1 (n = 3) i dodjeljuje m istu vrijednost kao 3

var n = 2, m = 3;
m = n++ // povećava n za 1 (n = 3), ali postavlja m na prethodnu vrijednost n = 2

Siguran sam da lako možete razumjeti prvi primjer. Ali s drugim može biti problema. Da biste lakše razumjeli ovu stvar i da se ne biste zabunili, samo zamislite da ste varijabli m prvo dodijelili vrijednost varijable n, a tek nakon toga povećali vrijednost n za jedan. U prvom primjeru prvo ste povećali vrijednost n za jedan, a zatim ste tu vrijednost dodijelili varijabli m.

To je sve za aritmetičke operatore. Naravno, još uvijek postoji mnogo varijacija i suptilnosti korištenja ovih jednostavnih operatora, ali ovo će vam biti više nego dovoljno za početak.

Operatori usporedbe

I opet se sjećamo matematike. Znakovi su svima poznati. U programiranju se nazivaju operatori usporedbe. JavaScript koristi sljedeće operatore usporedbe:

< меньше
> više
<= меньше или равно
>= veće ili jednako
== jednako
!= nije jednako
=== strogo jednaki
!== strogo nije jednako

Imajte na umu da je znak "veće od ili jednako" napisan točno ovako >= , a ne => . Odnosno, strelica se postavlja prije znaka jednakosti, a ne iza njega.

Operatori usporedbe omogućuju usporedbu vrijednosti varijabli, a rezultat ove operacije uvijek je Booleova vrijednost true ili false. Obično se koriste u uvjetnim izrazima. Rezultat usporedbe određuje koji će se dio koda sljedeći izvršiti.

U JavaScriptu možete usporediti različiti tipovi podataka u isto vrijeme, na primjer, broj i niz:

12345 == "12345" // istina

Samo što se u ovom slučaju niz automatski pretvara u broj. Stroga jednakost === ili nejednakost!== koriste se samo kada se uspoređuju varijable istog tipa.

Logički operatori

Logičke operacije u JavaScriptu jedna su od prilično škakljivih tema za početnike. Vrijedi ga temeljito razumjeti kako biste uspješno napredovali u svladavanju jezika. Najčešće se koriste u kombinaciji s operatorima usporedbe i proizvode Booleovu vrijednost true ili false.

Postoje tri logička operatora:

&& (I)
|| (ILI)
! (NE)

Logički operator && (AND)

Operator && izvodi logičku operaciju I na dvije vrijednosti. Međutim, vraća true ako i samo ako oba operanda daju vrijednost true. Ako su jedan ili oba operanda lažni, tada operator vraća laž. Primjeri:

2 < 3 && 4 < 5 // true
2 < 3 && 5 < 4 // false
3 < 2 && 5 < 4 // false

Logički operatori imaju manji prioritet od operatora usporedbe, tako da u navedenim primjerima nemamo zagrade. Jasno je da prvo brojeve međusobno uspoređujemo, a tek onda primjenjujemo logiku.

Logički operator || (ILI)

S logičkim operatorom || (ILI) drugu pjesmu. Operater || izvodi logičku operaciju ILI na dva operanda. Ako jedan ili oba operanda imaju pravo značenje, vraća true. Ako su oba operanda false, vraća false. Primjeri:

2 < 3 || 4 < 5 // true
2 < 3 || 5 < 4 // true
3 < 2 || 5 < 4 // false

Logički operatori imaju trik. Ne vole dodatni posao. Kao i ja, usput. Svoje izračune uvijek počinju s lijeva na desno. A ako prvi dio izraza odgovara njihovim uvjetima, onda čak ni ne procjenjuju ostatak izraza.

Na primjer, ako je operator || pronađe pravu vrijednost na samom početku, odmah daje pravu vrijednost, a ostalo ne provjerava. Također, && operator, ako pronađe lažni izraz na samom početku, onda odmah daje lažni rezultat, a ostatak izraza ne provjerava.

I još jedan trik: prioritet AND operatora && veći je od OR || pa se izvršava ranije:

2 < 3 || 4 < 5 && 5 < 6 // здесь сначала будет выполнено вычисление в правой части, а потом уже в левой

Logički operator! (NE)

Logički operator! stoji za "logično NE". Koristi se sa samo jednim operandom i poništava vrijednost tog operanda. Ako je n točno, tada će!n biti lažno. Budući da se ovaj operator može pridružiti samo jednom operandu, da bi se cijeli izraz obrnuo, mora se staviti u zagrade!(n && m) .

String operatori

Ranije smo već govorili o string operatorima. Ovo je isti plus + koji se koristi za povezivanje varijabli niza, ili na drugi način - za ulančavanje(dodavanje nizova). Primjer:

"Igor" + "Quentor" == "Igor Quentor"

Imajte na umu da prva riječ ima razmak dodan prije završnog navodnika. Ako ga ne dodate, reci će se spojiti u jednu riječ “IgorQuentor”.

Ovaj operator ima jednu značajku: ako izraz sadrži barem jedan niz, tada se on i svi ostali argumenti pretvaraju u tip niza. Na primjer:

Ostali aritmetički operatori rade samo s brojevima i svoje argumente uvijek svode na broj.

Uvjetne izjave

U JavaScriptu postoje dva uvjetna operatora if and?: Iako, da budemo precizni, if je zapravo kontrolna instrukcija i prilično opširna, s hrpom dobrih stvari i zanimljivih značajki. Stoga će o tome biti poseban članak. Za sada, pogledajmo jednostavniji uvjetni operator?:

Obično se ovaj operator piše kao?: Ali u programima izgleda drugačije. Ima tri operanda. Da li prvi operand prethodi znaku? , drugi je između likova? i: treći - nakon:

stanje? vrijednost 1: vrijednost 2

Značenje njegove operacije je jednostavno: ako je postavljeni uvjet ispunjen, tada se vraća vrijednost 1, ali ako nije, vrijednost 2. Ovaj uvjetni operator često služi kao jednostavnija zamjena za naredbu if, kada potonja nije osobito potrebno. Ujedno je sam zapis skraćen i lakše čitljiv.

To je sve za sada!

Nadam se da sada razumijete nešto o operatorima u JavaScriptu. A da vam mozak ne prokuha, evo vam jedan kratki crtić za opuštanje - Programer može sve! :)