Metode za rad sa nizovima

Array.from()

Korišćenjem metode “from()” možemo od “array-like” ili “iterable” napraviti niz:


Continue reading…


Pregled novih JavaScript standarda

Spisak novosti

eckma-script-standard

U ovome tekstu su izlistane sve novine koje su došle u sklopu novih JavaScript standarda, a obradjene su na sajltu webprogramiranje.org kroz različite članke:

Standard Novina Članak
ES2015 Novi način deklarisanja promenjivih sa ključnim rečima let & const “let & const”
ES2015 Jednostavno definisanje podrazumevanih vrednosti parametara funukcije “Podrazumevane vrednosti parametara funkcije”
ES2015 Sintaksna poboljšanja objektnog literala “Object literal” poboljšanja
ES2015 Klase “Klase u JavaScript-u”
ES2015 Nova petlja za iteraciju kroz iterable objekte: for…of “Petlje i iteracije u JavaScript-u”
ES2015 Nove metode za rad sa nizovima: Array.from() Array.prototype.find() i Array.prototype.findIndex() “Nove metode u radu sa nizovima”
ES2015 Nova sintaksa za import/export modula “Modularno programiranje sa ES6 standardom
ES2015 Promisi “Promise i asinhrono programiranje”
ES2015 Nova metoda konstruktorske funkcije: Object.assign() Svojstva i metode konstruktorske f-je Object()
ES2015 Nove karakteristike “string-a” “Nove karakteristike string-a”
ES2015 Arrow funkcija “Arrow funkcija”
ES2015 Novi tipovi podataka Map, Set & Symbol Novi tipovi podataka Map, Set & Symbol
ES2015 Spread & Rest operatori “Spread & Rest operatori”
ES2015 Destruktuiranje podataka “Destrukuiranje u JavaScript-u”
ES2015 Iteratori & Generatori Iteratori i Generatori
ES2016 Nova metoda za rad sa nizovima: Array.prototype.inludes() “Nove metode u radu sa nizovima”
ES2016 Eksponencijalni operator ** Eksponencijalni operator **
ES2017 Nove metode konstruktorske funkcije: Object.entries, Object.values i Object.getOwnPropertyDescriptors() Svojstva i metode konstruktorske f-je Object()
ES2017 Async/Await sintaksi “Async/Await” sintaksa za bolje “Promise”

Šta je hoisting?

Uvod

js this

Često se pogrešno misli da je JavaScript interpretiran programski jezik koji se interpretira tj. direktno izvršava red po red bez prethodnog kompajliranja (prevodjenja jezika na mašinski jezik). Medjutim JavaScript je programski jezik koji se kompajlira pri izvršenju koda (“on the fly“). JavaScript kod se kompajlira svaki put pri izvršenju koda, tako da kvalitet i brzina odziva JavaScripta kao jezika najviše zavisi od efikasnosti Javascript engine koji vrši kompajliranje.

Hoisting promenjive

Deklarisanje i definisanje promenjive su dva različita postupka. “Deklaracija promenjive” je postupak stvaranja promenjive, tada se definiše ime promenjive i obezbedjuje prostor za njeno skladištenje, dok je “definisanje promenjive” postupak kada se promenjivoj dodeljuje neka vrednost koja se smešta u prostor za skladištenje.

Hoisting deklarisane promenjive

Deklaracija promenjive se izvršava pri kompajliranju koda, što znači da se pre izvršenja i jednog reda koda prvo deklarišu promenjive. U okviru JavaScript-a postoji specijalna rezervisana reč “var” koja se koristi da deklariše promenjivu. Pošto se deklaracija promenjive dešava pre izvršavanja bilo kog dela koda sledi da je to isto kao da su promenjive deklarisane na početku koda, ovaj princip se naziva “hoisting” (srp. dizanje).


Continue reading…

Scope (oblast definisanosti promenjive)

Definicija

js this

Pojam “scope” (oblast definisanosti promenjive) je vezan za pojam promenjive i predstavlja deo programskog koda u kojoj je neka promenjiva dostupna. Osnovna karakteristika oblasti definisanosti je granica te oblasti. Promenjivoj se može pristupiti samo ukoliko je potražujemo u okviru njene oblasti definisanosti tj. ne može se pristupiti promenjivoj ukoliko se nalazimo izvan scope-a.

Treba napomenuti da “scope” nije isto što i “context”. Ova dva pojma se često mešaju jer imaju neke sličnosti ali treba znati da je pojam “scope” je osobina promenjive, dok je “context” osobina programskog koda. Tokom izvršavanja, program prolazi (ulazi i izlazi) kroz različite oblasti definisanosti promenjive (scope), a promenjive su tada ili u “context-u” ili ne. “Contex” je sličan oblasti definisanosti jer takodje zavisi od pozicije u programu (“lexical context”) ili vremena izvršavanja koda (“execution context”).

Continue reading…


1001 način kreiranja objekata u JavaScriptu

new Object()

Jedan od najosnovnijih načina je kreiranje praznog objekta sa rezervisanom reči new na osnovu ugradjene konstruktorske funkcije Object(), a zatim pojedinačno dodavati svojstava.


Continue reading…

Svojstva i metode konstruktorske f-je Object()

Uvod

Object() je funkcija koja se može smatrati “majkom” svih objekata. Svi objekti u JavaScriptu su nastali od ove funkcije. Kreiranje objekata je moguće na više načina ali naredni način najbolje objašnjava vezu izmedju konstruktorske funkcije i objekta:

Konstruktorska funkcija ima brojne metode i dva svojstva: “Object.length” (veoma čudno svojstvo koje uvek vraća 1) i “Object.prototype”

OBJAŠNJENJE:
Funkcije u javascriptu su “First class citizen”, stoga podržavaju sve operacije dostupne drugim tipovima. Izmedju ostalih tipova funkcije podržavaju i karakteristike objekata, pa stoga funkcije kao i objekti imaju svoja svojstva i metode. Jedno od najbitnijih karakteristika konstruktorske funkcije je svojstvo Object.prototype, preko koga konstruktorska funkcija prosledjuje osnovna svojstva i metede svim objektima u JavaScript-u.

Continue reading…


JavaScript operatori

Šta su operatori

javascript

Pod operatorom se najčešće podrazumeva simbol koji se koristi kada želimo da izvršimo neku standardnu često korišćenu operaciju kao npr. dodeljivanje vrednosti, poredjenje vrednosti, aritmetičke operacije…
Operatori se mogu shvatiti kao specijalne funkcije koje su za razliku od “običnih funkcija” pisane na “nestadardni način”. Operatori koriste tzv. “infix” notaciju (naziv funkcije se stavlja izmedju dva parametra). Standardni operator prikazan sa “infix” notacijom izgleda ovako:
... operator...
Na sledećem primeru se vidi da postoji suštinaska sličnost operatora sa funkcijom:

Najčešće su u pitanju binarni operatori (operatori koji uzimaju dve vrednosti kao ulaz), mada postoje i unarni operatori koji izvršavaju odredjene operacije samo na jednoj vrednosti:

Continue reading…


Konverzija tipova u JavaScript-u

Uvod

javascript_konverzija

JavaScript je slabo (eng. loosely) tipiziran jezik, što znači da ne zahteva da se jasno deklarišete vrsta podataka pri deklarisanju promenjive. Kod JavaScript-a se tip promenjive implicitno deklariše sa pridruživanjem odredjene vrednosti datoj promenjivoj.
Javascript je takodje jezik dinamičkih tipova jer je moguća promena tipa u toku izvršenja programa. Rezultat konverzije je uvek neka primitivna vrednost, tj. ne postoji konverzija čiji je rezultat neka složena vrednost (kao što je objekat ili funkcija). Za razliku od JavaScript-a, TypeScript (JavaScript superset jezik) je “strongly typed” jezik koji zahteva da se pri deklaraciji promenjive definiše tip i ne dozvoljava implicitno menjanje tipova.

Continue reading…


Značenje operatora “this” u JavaScript-u

Uvod

js this

Programeri koriste jedan od ova dva mehanizma:

  • leksički opseg vidljivosti
  • “this mehanizam”

Mehanizam koji koristi rezervisanu reč “this” pruža elegantan način za implicitno “prosledjivanje” reference na odredjeni objekat, što dovodi do čistijeg dizajna i olakšava višekratnu upotrebu koda. Programeri koji izbegavaju da koriste this mehanizam, uglavnom to rade zbog ne razumevanja principa rada tog mehanizma.

“This” nije promenjiva već specijalana reč programskog jezika (operator) i predstavlja vezu koja ukazuje na neku referencu (objekat). Aktivira se tj. dobija značenje tek u trenutku kada se pozove (invoke) funkcija koja ga sadrži.

Ne zavisi od mesta gde je funkcija deklarisana, već isključivo od mesta i načina na koji je funkcija pozvana!

Pravila za odredjivanje značenja “this”

Ceo postupak odredjivanja značenja se zasniva na prepoznavanju “ko” i na koji način poziva funkciju koja sadrži “this”. Redosled radnji je sledeći:

  1. Prvo se proverava da li je konstruktorska funkcija pozvana sa operatorom new(). Ukoliko jeste pozvana na ovaj način onda je vrednost “this” objašnjena pod tačkom a) Pozivanje funkcije sa operatorom “new” ali ako nije pozvana na ovaj način onda se vrši…
  2. … kontrola da li je funkcija pozvana uz pomoć metoda call(), apply() (ili bind). Ukoliko jeste pozvana na ovaj način onda je vrednost “this” objašnjena pod tačkom b) Pozivanje sa call(), apply() ili bind(), ali ako nije pozvana na ovaj način onda se vrši …
  3. …kontrola da li je funkcija pozvana kao metoda objekta. Ukoliko jeste pozvana na ovje način onda je vrednost “this” objašnjena pod tačkom c) Pozivanje metode objekta, ali ako nije pozvana na ovaj način onda je…
  4. podrazumevano povezivanje, koje je objašnjeno pod tačkom d) Podrazumevano povezivanje

Ukoliko je nekim slučajem korišćeno više različitih pravila, primenjuje se prioritet prema redosledu iz prethodno opisanog postupka.

Continue reading…


Pregled objekata ugradjenih u JavaScript

Uvod

js this

U sklopu samog JavaScript-a postoje ugradjeni objekti sa svojim svojstvima i metodama, namenjeni da olakšaju programiranje.

  • Array
  • Math
  • Date
  • Function

Pored navedenih objekata postoje još i objekti čija imena su ista kao imena prostih primitiva (samo sa velikim početnim slovom):

  • String
  • Number

Ovi objekti sa “opremljeni” metodama potrebnim za rad sa odgovarajućim tipom podataka i zamišljeni su da olakšaju rad sa primitivnim tipovima. Kada se pojavi potreba za operacijom nad takvim primitivnim tipom, kompajler automatski “obmotava” prost tip u njegov “parnjak” objekat nakon čega su dostupne sve metode ugradjenog objekta.

U ovom članku sam želeo da pregledno okupim na jednom mestu sve metode i svojstva objekata ugradjenih u javascript-u.

Continue reading…