Javaskript

Iz Vikipedije, slobodne enciklopedije
Idi na: navigaciju, pretragu
Ne poistovećivati sa Java (programski jezik).
Javaskript
JavaScript-logo.png
Logo programskog jezika Javaskript
Originalni naziv engl. JavaScript
Izgovara se Džavaskript ili Javaskript
Model skriptni, objektno-orijentisani (prototipni), imperativni, funkcionalni i vođen događajima
Pojavio se 4. decembar 1995. god.; pre 21 godine (1995-12-04)[1]
Autor(i) Brendan Ajk
Dizajner(i) Netskejp, Mozila Fondacija, Ecma International
Aktuelna verzija ECMAScript 2016[2]
Datum aktuelne verzije 17. jun 2016. god.; pre 12 meseci (2016-06-17)
Sistem kucanja dinamičko
Implementacije V8, JavaSkriptKor, SpiderMonkey, Chakra
Uticaji Lua, Scheme, Perl, Self, Java, Ce, Pajton, AWK, HyperTalk
Uticao na ActionScript, AtScript, CoffeeScript, Dart, JScript .NET, LiveScript, Objective-J, Opa, Perl 6, QML, TypeScript,
Javaskript
Ekstenzija fajla: .js
Razvio: Brendan Ajk
Prvo pojavljivanje: 1995.
Tip formata: skriptni jezik


Javaskript ili Džavaskript (engl. JavaScript) je dinamičan, slabo tipizaran i interpretiran programski jezik visokog nivoa. Standardizovan je po EKMASkript specifikaciji jezika. Pored HTML-a i CSS-a, Javaskript je jedna od tri vodeće tehnologije za definisanje sadržaja na Vebu; većina veb-sajtova koristi Javaskript a svi moderni veb-čitači ga podržavaju bez potrebe za instaliranjem dodataka. Javaskript je jezik zasnovan na prototipovima sa funkcijama prvog reda, što ga čini jezikom višestruke paradigme koji podržava objektno-orijentisani,[3] imperativni i funkcionalni način programiranja. Sadrži API za rad sa tekstom, nizovima, datumima i regularnim izrazima, ali ne i ulazno/izlazne funkcionalnosti, kao što su povezivanje, skladištenje podataka ili grafičke funkcionalnosti, za šta se oslanja na okruženje u kome se izvršava.

Iako se na prvi pogled može reći da Javaskript ima određene sličnosti sa programskim jezikom Java, kao što su naziv, sintaksa i standardne biblioteke, oni su dva potpuno različita programska jezika koja se značajno razlikuju u svom dizajnu. Na programski jezik JavaSkript najviše su uticali jezici kao što su Self i Scheme.[4]

Javaskript se pored Veba koristi i u drugim okruženjima, kao što su PDF dokumenti, Veb-čitači za specifične veb-sajtove (engl. site-specific browsers) i desktop vidžeti (engl. widget). Nove i znatno brže JavaSkript virtuelne mašine i platforme zasnovane na njima, popularizovale su JavaSkript za izradu veb aplikacija na serverskoj strani. Na klijentskoj strani, programeri najčešće implementiraju JavaSkript kao interpetirani jezik, ali sve više novijih veb-čitača obavlja just-in-time kompajliranje. Javaskript se još koristi i za razvoj video igara, desktop i mobilnih aplikacija kao i u mrežnom programiranju na serverskoj strani sa izvršnim okruženjima kao što je Node.js.

Istorijat[uredi]

Počeci u Netskejpu[uredi]

1993. godine, Nacionalni centar za superkompjuterske aplikacije (engl. National Center for Supercomputing Applications - NCSA), koji je deo Univerziteta u Ilinoisu, objavio je Mozaik, prvi popularni grafički veb-čitač, koji je odigrao značajnu ulogu u razvoju Veba koji je u to vreme bio na samom začetku. 1994. godine u Mauntin Vjuu, u Kaliforniji, osnovana je kompanija pod nazivom Mozaik Komjunikejšn, koja je zaposlila većinu autora originalnog veb-čitača Mozaik kako bi razvili Mozaik Netskejp. Kasnije će se ispostaviti da ovaj veb-čitač neće imati nikakve sličnosti sa originalnim Mozaikom. Interni naziv za ovaj veb-čitač bio je "Mozila", što je značilo "ubica Mozaika" engl. Mosaic killer, jer je cilj kompanije bio da zameni Mozaik kao najpopularniji veb-čitač na svetu. Prva verzija veb-čitača, Mozaik Netskejp 0.9, objavljena je krajem 1994. godine. Za samo četiri meseca ovaj veb-čitač je već zauzeo tri četvrtine tržišta veb-čitača i postao je najpopularniji veb-čitač devedesetih godina 20. veka. Kako bi izbegli probleme sa autorskim pravima sa NCSA, veb-čitač je iste godine dobio nov naziv, Netskejp navigator, a kompanija Netskejp Komjunikejšn.

U ovoj kompaniji su na vreme shvatili da bi Veb trebalo da postane dinamičniji. Osnivač kompanije, Mark Andresen, tvrdio je da HTML-u treba prateći jezik koji veb dizajneri i programeri mogu lako da koriste za sklapanje komponenti kao što su slike i dodaci, čiji bi se kod pisao direktno u HTML kodu veb stranice. Kako bi uopšte započeli sa radom, kompanija Netskejp Komjunikejšn je morala da sarađuje sa kompanijom San Majkrosistems da bi u ovaj veb-čitač ugradili njihov statični programski jezik Javu i time se borili sa konkurentskom kompanijom Majkrosoft za veću naklonost korisnika i usvajanje veb tehnologija i platformi.[5] Odlučeno je da se kreira programski jezik komplementaran Javi, sa sličnom sintaksom, što je u startu značilo odbacivanje podrške za druge programske jezike kao što su Perl, Pajton, TCL ili Scheme. Kako bi odbranili ideju JavaSkripta u odnosu na ponudu konkurenata, kompanije je bio potreban prototip. Ajk je napisao prototip budućeg programskog jezika za 10 dana, u maju 1995. godine.

Iako je razvijan pod kodnim nazivom Moka, jezik je zvanično nazvan LajvSkript prilikom prvog objavljivanja beta verzija Netskejp navigatora 2.0, septembra 1995. godine, ali je ubrzo preimenovan u JavaSkript[1] sa objavljivanjem Netskejp navigatora 2.0 beta 3 verzije, u decembru iste godine.[6] Konačan izbor imena je izazvao konfuziju kod korisnika jer je stvoren utisak da je ovo još jedna varijanta programskog jezika Java, a sam izbor imena je okarakterisan kao marketinški trik Netskejpa kako bi se JavaSkript predstavio kao najnoviji veb programski jezik.

Često se javlja pogrešno tumačenje da je na razvoj JavaSkripta bitno uticao veb skriptni jezik C-- razvijen od strane kompanije Nombas (ovaj skriptni jezik ne treba mešati sa kasnije razvijenim jezikom C--, 1997. godine]).[7][8] U prilog tome ide i činjenica da Brendan Ajk nije nikad čuo za C-- pre nego što je kreirao LajvSkript.[9] Nombas je obezbeđivao ugrađene skriptne veb stranice Netskejpu, iako koncept skriptnih veb stranica nije bio nov, kao što se može videti u veb-čitaču ViolaWWW.[10] Kasnije je kompanija Nombas odlučila da u svom proizvodu SkriptIz, C-- zameni JavaSkriptom i učestvovala je u standardizaciji EKMASkripta kroz TC39 grupu.[11]

JavaSkript na serverskoj strani[uredi]

U decembru 1995. godine, ubrzo nakon objavljivanja JavaSkripta za veb-čitače, kompanija Netskejp je predstavila i implementaciju ovog jezika za servere kroz Netskejp Enterprajz Server (engl. Netscape Enterprise Server).

Od sredine 2000-ih, objavljeno je nekoliko serverskih JavaSkript implementacija, među kojima najpoznatiji Node.js (2009. godine).[12]

Prihvatanje JavaSkripta od strane Majkrosofta[uredi]

Majkrosoft je 1996. godine predstavio svoje skriptne jezike, VBSkript i JSkript. JSkript, obrnuta implementacija Netskejpovog JavaSkripta, bila je deo Internet Eksplorera 3. JSkript je takođe bio dostupan i kao serverska implementacija skriptnog jezika u Internet Informacionom Serveru. Internet Eksplorer 3 je po prvi put doneo podršku za CSS i različite HTML dodatke, ali se vodilo računa o tome da svaka implementacija bude značajno različita od one u Netskejp navigatoru.[13][14] Ove razlike su otežavale dizajnerima i programerima da kreiraju veb-sajtove koji bi funkcionisali u oba veb-čitača, što je dovelo do pojave logoa "najbolji prikaz u Netskejpu" i "najbolji prikaz u Internet Eksploreru" koji su obeležili početne godine borbe među veb-čitačima.[15] JavaSkript je počeo da stiče reputaciju prepreke višeplatformskom i standardizovanom Vebu. Programeri su se prihvatili zadatka da pokušaju da kreiraju veb-sajtove koji će raditi u oba najpoznatija veb-čitača iako većina nije imala vremena za to.[13] Objavom Internet Eksplorera 4, Majkrosoft je predstavio koncept dinamičkog HTML-a, ali su razlike u implementaciji jezika i različiti vlasnički objektni modeli dokumenata predstavljali prepreke za širu primenu JavaSkripta na Vebu.[13]

Standardizacija[uredi]

U novembru 1996. godine, Netskejp je standardizovao JavaSkript kako bi ostale kompanije koje razvijaju veb-čitače mogle da ga implementiraju u svojim proizvodima. To je dovelo do zvaničnog objavljivanja specifikacije jezika EKMASkript koja je objavljena u prvoj verziji EKMA-262 standarda u junu 1997. godine, čija je najpoznatija implementacija upravo JavaSkript. EkšnSkript i JSkript su takođe poznate implementacije EKMASkripta sa dodacima.

Proces standardizacije je nastavljen u ciklusima, objavljivanjem EKMASkripta 2 u junu 1998. godine, koji donosi određene promene kako bi se prilagodio ISO/IEC 16262 međunarodnom standardu. Sa objavljivanjem je nastavljeno u decembru 1999. godine sa EKMASkriptom 3, koji predstavnja osnovu za JavaSkript kakav danas znamo. Razvoj originalnog EKMASkripta 4, koji je vodio Valdemar Horvat (tada zaposleni u Netskejpu, danas u Guglu), počeo je 2000. godine i na samom početku je izgledalo kao da Majkrosoft učestvuje u tome pa je čak i implementirao neke karakteristike u njihov JSkript .NET jezik.

Vremenom je bilo jasno da Majkrosoft ne namerava da sarađuje niti da implementira JavaSkript u InternetEksploreru, iako nisu imali dostojnu alternativu već samo parcijalno završenu implementaciju .NET serverske strane. Zbog toga je do 2003. godine razvoj EKMASkripta 4 bio zapostavljen.

Sledeća bitna godina za JavaSkript bila je 2005. sa dva velika istorijska događaja za razvoj JavaSkripta. Prvo su se Brendan Ajk i Mozila pridružili EKMA Internešnal kao neprofitni članovi i započet je rad na EKMASkriptu za XML (E4X), EKMA-357 standardu, koji je potekao od Majkrosoftovih bivših zaposlenih koji su sad radili za BEA Sistems. To je dovelo do zajedničkog rada sa kompanijom Makromedija (koju je kasnije kupio Adobi Sistems), koji su primenili E4X u svom EkšnSkriptu 3 (EkšnSkript 3 je bio fork originalnog EKMASkripta 4).

Zajedno sa Makromedijom ponovo je otpočet razvoj EKMASkripta 4 sa ciljem standardizacije komponenti iz EkšnSkripta 3. Na kraju ovog procesa, Adobi Sistems je objavio EkšnSkript virtuelnu mašinu verzije 2, kodnog naziva Tamarin, kao projekat otvorenog koda. Međutim, Tamarin i EkšnSkript 3 su bili značajno različiti od onoga čemu JavaSkript teži, što su obe strane uvidele tokom 2007. i 2008. godine.

Na tržištu je vladao haos među različitim igračima. Daglas Krokford, tada zaposleni u Jahu-u, udružio se sa Majkrosoftom 2007. godine kako bi se suprotstavio EKMASkript 4 standardu, što je dovelo do razvoja EKMASkript 3.1 standarda. Iako razvoj EKMASkript 4 standarda nikad nije dovršen, on je bitno uticao na naredne verzije.[16]

Dok se sve ovo dešavalo, zajednice otvorenog koda i programera su nastavile na razvoju revolucionarnih mogućnosti sa JavaSkriptom. Napor zajednice je dobio zamajac 2005. godine kada je Džesi Džejms Garet osmislio koncept Ajaksa i opisao skup tehnologija, gde je oslonac bio na JavaSkriptu, koje se koriste za kreiranje veb aplikacija kod kojih se podaci mogu učitavati u pozadini, bez potrebe da se cela stranica učita, što je dovelo do razvoja još dinamičnijih aplikacija. Sve ovo je dovelo do perioda preporoda u korišćenju JavaSkripta, predvođenog bibliotekama otvorenog koda i zajednicama koje su se formirale oko njih, sa bibliotekama kao što su Prototajp, džejKveri, Dodžo Tulkit, MuTuls i druge.

U julu 2008. godine, razdvojene strane su se sastale u Oslu. To je dovelo do eventualnog dogovora početkom 2009. godine, da se EKMASkript 3.1 standard preimenuje u EKMASkript 5 i da se jezik unapredi prateći agendu poznatiju kao Harmoni (engl. Harmony). EKMASkript 5 je konačno objavljen u decembru 2009. godine.

U junu 2011. godine, EKMASkript 5.1 je objavljen kako bi se u potpunosti izjednačio sa trećim izdanjem ISO/IEC 16262 međunarodnog standarda. EKMASkript 2015 je objavljen u junu 2015. godine. Trenutna verzija EKMASkript 2016 je objavljena u junu 2016. godine.[17]

Kasniji razvoj[uredi]

JavaSkript je postao jedan od najpopularnijih programskih jezika na Vebu. Međutim, na samom početku jezik nije bio na dobrom glasu među programerima profesionalcima, zbog toga što su mu, između ostalog, ciljna publika bili veb autori i ostali "amateri".[18] Sa pojavom Ajaksa JavaSkript se vraća u centar pažnje i postaje atraktivan za sve više programera. Rezultat toga je umnožavanje obimnih frejmvorka i biblioteka, poboljšana JavaSkript rutina programiranja i povećano korišćenje JavaSkripta izvan veb-čitača, što je u direktnoj korelaciji sa značajnim razvojem serverskih JavaSkript platformi.

U januaru 2009. godine, predstavljen je projekat KomonJS (engl. CommonJS) sa ciljem standardizacije zajedničkih biblioteka, uglavnom za JavaSkript razvoj izvan veb-čitača.[19]

Sa porastom jednostraničnih aplikacija i naprednih JavaSkript sajtova, povećano je njegovo korišćenje od strane kompajlera kako za dinamičke tako i za statičke programske jezike.

Zaštitni znak[uredi]

"JavaSkript" je zaštitni znak Orakl Korporacije.[20] Koriti se pod licencom za tehnologiju koju je osmislila i implementirala kompanija Netskejp Komjunikejšn i njeni naslednici kao što je Mozila fondacija.[21]

Karakteristike[uredi]

Navedene karakteristike su zajedničke za sve EKMASkript implementacije, osim ako nije eksplicitno drugačije navedeno.

Univerzalna podrška[uredi]

Svi moderni vebčitači podržavaju JavaSkript sa ugrađenim interpreterima.

Imperativni i strukturirani[uredi]

JavaSkript podržava veći deo strukturirane sintakse programskog jezika C (npr. if iskaze, while petlje, switch iskaze, do while petlje, i dr.). Delimičan izuzetak je opseg promenljivih: JavaSkript je u originalu podržavao samo funkcionalni opseg promenljivih pomoću deklaracije var. EKMASkript 2015 donosi ključnu reč let za blokovski opseg, tako da sada JavaSkript podržava funkcionalni i blokovski opseg. Kao i C, JavaSkript pravi razliku između iskaza i izraza. Još jedna bitna razlika u odnosu na C je i automatsko umetanje kraja naredbe odnosno karaktera tačka-zarez, pa nije potrebno eksplicitno naglašavati kraj naredbe sa znakom tačka-zarez.[22]

Dinamični[uredi]

Kucanje
Kao i većina skriptnih jezika, Javaskript je jezik sa dinamičnom proverom kucanja; tip je povezan sa svakom vrednošću pre nego sa svakoim izrazom. Na primer, ukoliko imamo neku promenljivu koja je vezana za broj, ta ista promenljiva kasnije može biti vezana za string.[23] JavaSkript podržava različite načine provere tipa objekta.
Provera prilikom izvršavanja
JavaSkript sadrži eval koja može da izvršava iskaze u obliku stringova u vreme izvršavanja.

Prototipni (objektno-orijentisani)[uredi]

Javaskript je skoro u potpunosti objektno zasnovan skriptni jezik. U JavaSkriptu, objekat predstavlja asocijativni niz, naglašen pomoću prototipa; svaki ključ u obliku niza karaktera predstavlja naziv svojstva objekta za koji postoji dva sintaksna način za definisanje takvog naziva; notacija sa tačkom, engl. dot notation (obj.x = 10) i notacija sa zagradama, engl. bracket notation (obj['x'] = 10). Svojstvo se može dodati ili obrisati za vreme izvrašavanja koda. Većina svojstava objekta (ili bilo kog svojstva koje pripada lancu nasleđivanja prototipa objekta) se može nabrojati korišćenjem for...in petlje. JavaSkript sadrži ograničen broj ugrađenih objekata, kao što su Date i Function.

Prototipovi
JavaSkript koristi prototipove u slučajevima u kojima drugi objektno-orijentisani programski jezici koriste klase za nasleđivanje.[24] Pomoću prototipova u JavaSkriptu je moguće simulirate mnoge karakteristike klasa.[25]
Funkcije kao konstruktori objekata
Funkcije osim svoje glavne funkcije, imaju i ulogu konstruktora objekata. Dodavanjem prefiksa new ispred poziva funkcije, kreira novu instancu prototipa, nasleđujući svojstva i metode konstruktora (uključujući i svojstva Object prototipa).[26] EKMASkript 5 sadrži metodu Object.create, koja omogućava eksplicitno kreiranje instance bez automatskog nasleđivanja Object prototipa (starija okruženja mogu dodeljivati prototipu vrednost null).[27] Svojstvo prototype konstruktora određuje koji objekat se koristi kao interni prototip novog objekta. Nove metode se mogu dodati izmenom prototipa funkcije koja se koristi kao konstruktor. Konstruktori dostupni u samom JavaSkriptu, kao što su Array i Object, takođe imaju svoje prototipove koji mogu da se izmene. Iako moguća, izmena Object prototipa nije dobra praksa zbog toga što većina objekata u JavaSkriptu nasleđuje metode i svojstva iz Object prototipa i potencijalno ne očekuju njegovu izmenu.[28]
Funkcije kao metode
Za razliku od većine objektno-orijentisanih jezika, u JavaSkriptu ne postoji razlika između definisanja funkcija i definisanja metoda. Najčešće, razlika postoji kod pozivanja funkcije; kada se funkcija poziva kao metoda objekta, njena lokalna ključna reč this se vezuje za taj objekat prilikom pozivanja.

Funkcionalni[uredi]

Funkcija je prve klase i može se tretirati kao objekat. Kao takva, funkcija može da sadrži svojstva i metode, kao što je .call() i .bind().[29] Ugnježdena funkcija je funkcija koja se definiše unutar druge funkcije. Ovakva funkcija se kreira svaki put kada se pozove nadređena funkcija. Dodatno, svaka nadređena funkcija formira leksički blok; Leksički blok nadređene funkcije (uključujući konstante, lokalne promenljive i vrednosti argumenata) postaju sastavni deo svakog objekta podređene funkcije, čak i nakon završetka izvršavanja nadređene funkcije.[30] JavaSkript podržava i anonimne funkcije.

Delegirani[uredi]

JavaSkript podržava implicitno i eksplicitno delegiranje.

Funkcije kao uloge (Traits i Mixins)
JavaSkript podrazumevano podržava različite funkcije implementirane u vidu uloga (engl. Roles)[31] i paterna kao što su Traits[32][33] i Mixins.[34]

Sintaksa[uredi]

Jednostavniji primeri[uredi]

Promenljive se u Javaskript-u definišu sa ključnom reči var. [35]

var x; // дефиниција променљиве x. Почетна вредност ове променљиве је недефинисана (eng. undefined). 
var y = 2; // дефиниција променљиве y и додела вредности 2.

Komentari se u Javaskript-u pišu na sledeći na sledeći način.

// кратак коментар у једној линији.
/*
     Дугачак, документацијски коментар.
     Написан у више линија.
*/
/*Коментар /* не сме бити угњежден. */Ово је синтаксна грешка*/

Za ispis teksta na ekranu, koristi se objekat konzole. U primeru je dato ispisivanje teksta Zdravo Svete.

console.log("Zdravo Svete.");

Iskazi if, else i else if [36]

// if исказ се користи ради активирања одређених наредби ако је одређени услов задовољен.

function funkcija4(){
  var boja = prompt("Koju boju najviše voliš?")
  if (boja == "rozu") {
       alert("Verovatno si žensko");
      }
  }
// else исказ се извршава онда када if услов није задовољен.

function funkcija2() {
  var broj = prompt("Unesite bilo koji broj!")
    if (broj <= 10) {
            alert("Uneli ste broj manji od 10");
        }
    else alert("Uneli ste broj veći od 10") 
    }
// else if исказ је веома користан јер дозвољава да се наведе више од једног услова.

var visitor= "";
if (visitor == "Drago" {
document.write("Pozdrav Drado...");
}
 else if (visitor == "Miloje") {
      document.write("Pozdrav Miloje...");
} 
else if(visitor == "Laki") {
      document.write("Pozdrav Laki...");
} 
else {
      document.write("Pozdrav posetioče...");
}

Jednostavna rekurzivna funkcija koja računa faktorijel.

function factorial(n) {
    if (n == 0) {
        return 1;
    }
    return n*factorial(n - 1);
}

Primer anonimne funkcije

var displayClosure = function() {
    var count = 0;
    return function () {
        return ++count;
    };
}
var inc = displayClosure();
inc(); // враћа 1
inc(); // враћа 2
inc(); // враћа 3

Napredniji primer[uredi]

Ovaj uzorak koda prikazuje razne Javaskript funkcije.

function LCMCalculator(x, y) {
    var checkInt = function (x) {
        if (x % 1 !== 0) {
            throw new TypeError(x + " is not an integer");
        }
        return x;
    };
    this.a = checkInt(x)
    this.b = checkInt(y);
}
LCMCalculator.prototype = {
    constructor: LCMCalculator,
    gcd: function () { 
        var a = Math.abs(this.a), b = Math.abs(this.b), t;
        if (a < b) {
            t = b;
            b = a;
            a = t;
        }
        while (b !== 0) {
            t = b;
            b = a % b;
            a = t;
        }
        this['gcd'] = function () {
            return a;
        };
        return a;
    },
    lcm : function () {
        var lcm = this.a/this.gcd()*this.b;
        this.lcm = function () {
            return lcm;
        };
        return lcm;
    },
    toString: function () {
        return "LCMCalculator: a = " + this.a + ", b = " + this.b;
    }
};
function output(x) {
    document.body.appendChild(document.createTextNode(x));
    document.body.appendChild(document.createElement('br'));
}

[[25, 55], [21, 56], [22, 58], [28, 56]].map(function (pair) {
    return new LCMCalculator(pair[0], pair[1]);
}).sort(function (a, b) {
    return a.lcm() - b.lcm();
}).forEach(function (obj) {
    output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
});

Upotreba u internet stranicama[uredi]

Najčešća upotreba Javaskript-a je dodavanje dinamičnosti HTML stranicama na klijentskoj strani. Skripte se uključuju u HTML stranice i vrše interakciju sa objektnim modelom dokumenata (engl. Document Object Model). Neki od primera upotrebe Javaskript-a su:

  • Učitavanje određenog dela stranice ili dostavljanje podataka serveru preko AJAKSA (engl. AJAX) bez ponovnog osvežavanja cele stranice (na primer društvena mreža vam omogućava ažuriranje novog statusa bez osvežavanja cele stranice).
  • Animiranje elemenata na stranici, čineći ih vidljivim i nevidljivim, menja elementima veličinu, pomera njihov sadržaj.
  • Ubacivanje interaktivnog sadržaja (na primer video klipova, animacija, video igrica, audio sadržaja...)
  • Validacija unetog sadržaja unutar formi, kako bi bili sigurni da su ispravni podaci poslati serveru.

Internet pretraživač je najčešće okruženje za izvršavanje Javaskript koda. Internet pretraživači obično kreiraju host objekte za predstavljanje objektnog modela dokumenata u Javaskript-u. Pored internet pretraživača, Javaskript kod se može izvršiti i na serveru.[37]

Jednostavna skripta[uredi]

Ispod je minimalistički primer internet stranice koja koristi Javaskript i objektni model dokumenata.

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>Minimal Example</title>
<body>
<h1 id="header">Ovo je Javaskript</h1>

<script>
    document.body.appendChild(document.createTextNode('Zdravo Svete!'));

    var h1 = document.getElementById('header');
    h1 = document.getElementsByTagName('h1')[0];
</script>

<noscript>Vaš pretraživač ne podržava Javaskript ili je trnutno isključen.</noscript>
</body>
</html>

Kompatibilnost[uredi]

S obzirom da JavaSkript kod može da se izvrši u različitim okruženjima, važan deo testiranja koda je i provera da li Javaskript kod radi na više različitih pretraživača.

Interfejs objektnog modela dokumenata za manipulaciju sa internet stranicama nije deo Ekmaskript standarda odnosno samog Javaskript-a, već je definisan posebnim standardom. U praksi, implementacija internet pretraživača se razlikuje u standardima, i samim tim ne izvršava svaki pretraživač Javaskript kod isto.

Da bi se ove razlike anulirale, Javaskript programeri mogu da pokušaju da napišu kod koji će se u većini pretraživača izvršavati isto. Ako se ne izvrši, moguće je napisati kod koji proverava prisustvo određenih vunkcija pretraživača.[38] U nekim slučajevim, dva pretraživača mogu izvršiti istu funkciju ali sa različitim ishodom. Tako da programer može praktično otkriti šta pretraživač radi i shodno tome izmeniti svoju skriptu kako bi je pretraživač izvršio na odgovarajući način.[39][40]

Osim toga, skripte ne mogu da rade za određene korisnike. Na primer korisnik može da:

  • Koristi stari ili redak internet pretraživač sa nepotpunom ili neobičnom podrškom za objektni model dokumenata.
  • Koristi PDA (engl. personal digital assistant) ili pretraživač na mobilnom telefonu koji ne može da izvrši Javaskript kod.
  • Da ima onemogućeno izvršavanje Javaskript-a kao meru predostrožnosti.

Kako bi pomogli ovim korisnicima, programeri mogu da naprave internet stranice koje degradiraju pretraživače da ne koriste Javaskript. Konkretno, strana bi trebala ostane upotrebljiva bez dodatnih elemenata Javaskript-a. Alternativni pristup rešavanju ovog problema jeste da prvi autor sadržaja koristi osnovne tehnologije koje rade u svim pretraživačima, a zatim poboljša sadržaj namenjen korisnicima koji podržavaju Javaskript. Ovo je poznato kao progresivno poboljšanje.

Istorijat verzija[uredi]

Sledeća tabela se zasniva na informacijama iz više izvora.[41][42][43]

Verzija Datum Ekvivalentno sa Netskejp
Navigator
Mozila
Fajerfoks
Internet
Eksplorer
Opera Safari Gugl
Hrom
1.0 Mart 1996 2.0 3.0
1.1 Avgust 1996 3.0
1.2 Jun 1997 4.0-4.05 3[44]
1.3 Oktobar 1998 EKMA (engl. ECMA)-262 1. + 2. izdanje 4.06-4.7x 4.0 5[45]
1.4 Netskejp
Server
6
1.5 Novembar 2000 ECMA-262 3. izdanje 6.0 1.0 5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 5.8)
7.0 3.0-5 1.0-10.0.666
1.6 Novembar 2005 1.5 + dodaci nizovima + generatori nizova i stringova + E4X 1.5
1.7 Oktobar 2006 1.6 + pajton generatori + iteratori + dozvole 2.0 28.0.1500.95
1.8 Jun 2008 1.7 + generatori izraza + zatvarači izraza 3.0 11.50
1.8.1 1.8 + podrška za Džejson(engl. JSON) + manji dodaci 3.5
1.8.2 Jun 22, 2009 1.8.1 + manji dodaci 3.6

Reference[uredi]

  1. 1,0 1,1 Press release announcing JavaScript, "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
  2. „Standard ECMA-262”. Ecma International. 17. 06. 2015. 
  3. „ECMAScript Language Specification” (PDF). 
  4. „ECMAScript Language Overview” (PDF). 23. 10. 2007. str. 4. Pristupljeno 03. 05. 2009. 
  5. Severance, Charles (February 2012). „JavaScript: Designing a Language in 10 Days”. Computer. IEEE Computer Society. 45 (2): 7—8. doi:10.1109/MC.2012.57. Pristupljeno 23. 03. 2013.  Proverite vrednost paramet(a)ra za datum: |date= (pomoć)
  6. „TechVision: Innovators of the Net: Brendan Eich and JavaScript”. web.archive.org. Arhivirano iz originala na datum 08. 02. 2008. 
  7. „The History of Programming Languages”. oreilly.com. O'Reilly Media. 2004. Pristupljeno 16. 07. 2016. 
  8. „What Is JavaScript?” (PDF). wiley.com. Wiley. Pristupljeno 16. 07. 2016. 
  9. Noorda, Brent (21. 09. 2013). „Brent Noorda's Answers on ECMA”. quora.com. Pristupljeno 16. 07. 2016. 
  10. Noorda, Brent (24. 06. 2010). „History of Nombas”. brent-noorda.com. Pristupljeno 16. 07. 2016. 
  11. Eich, Brendan (21. 06. 2011). „New JavaScript Engine Module Owner”. brendaneich.com. Pristupljeno 16. 07. 2016. 
  12. Netscape Communications Corporation (11. 12. 1998). „Server-Side JavaScript Guide”. oracle.com. Netscape Communications Corporation. Pristupljeno 16. 07. 2016. 
  13. 13,0 13,1 13,2 Champeon, Steve (6. 04. 2001). „JavaScript, How Did We Get Here?”. oreilly.com. Pristupljeno 16. 07. 2016. 
  14. „Microsoft Internet Explorer 3.0 Beta Now Available”. microsoft.com. Microsoft. 29. 05. 1996. Pristupljeno 16. 07. 2016. 
  15. McCracken, Harry (16. 09. 2010). „The Unwelcome Return of "Best Viewed with Internet Explorer". technologizer.com. Pristupljeno 16. 07. 2016. 
  16. „Documentation”. ecmascript.org. Pristupljeno 16. 07. 2016. 
  17. „Standard ECMA-262, ECMAScript® 2016 Language Specification”. ecma-international.org. June 2016. Pristupljeno 16. 07. 2016.  Proverite vrednost paramet(a)ra za datum: |date= (pomoć)
  18. Crockford, Douglas (2001). „JavaScript, The World's Most Misunderstood Programming Language”. crockford.com. Pristupljeno 16. 07. 2016. 
  19. Kowal, Kris (1. 12. 2009). „CommonJS Effort Sets JavaScript on Path for World Domination”. arstechnica.com. Pristupljeno 16. 07. 2016. 
  20. „USPTO Copyright entry #75026640”. USPTO. 
  21. „Sun Trademarks”. Sun Microsystems. Arhivirano iz originala na datum 28. 05. 2010. Pristupljeno 08. 11. 2007. 
  22. Flanagan (2006). str. 16.
  23. „JavaScript data types and data structures - JavaScript | MDN”. Developer.mozilla.org. 16. 02. 2017. Pristupljeno 24. 02. 2017. 
  24. „Inheritance and the prototype chain”. Mozilla Developer Network. Mozilla. Pristupljeno 6. 04. 2013. 
  25. Herman, David (2013). Effective JavaScript. Addison-Wesley. str. 83. ISBN 978-0-321-81218-6. 
  26. Haverbeke, Marijn (2011). Eloquent JavaScript. No Starch Press. str. 95—97. ISBN 978-1-59327-282-1. 
  27. Katz, Yehuda. „Understanding "Prototypes" in JavaScript”. Pristupljeno 6. 04. 2013. 
  28. Herman, David (2013). Effective JavaScript. Addison-Wesley. str. 125—127. ISBN 978-0-321-81218-6. 
  29. „Properties of the Function Object”. Es5.github.com. Pristupljeno 26. 05. 2013. 
  30. Flanagan (2006). str. 141.
  31. The many talents of JavaScript for generalizing Role-Oriented Programming approaches like Traits and Mixins, Peterseliger.blogpsot.de, April 11, 2014.
  32. Traits for JavaScript, 2010.
  33. „Home | CocktailJS”. Cocktailjs.github.io. Pristupljeno 24. 02. 2017. 
  34. Angus Croll, A fresh look at JavaScript Mixins, published May 31, 2011.
  35. „var – JavaScript – MDN”. The Mozilla Developer Network. Pristupljeno 30. 4. 2016. 
  36. Greška citata: Loša oznaka &lt;ref&gt;; nema teksta za ref-ove pod imenom ref1.
  37. „JavaScript tracking – Piwik”. Piwik. Pristupljeno 30. 4. 2016. 
  38. Peter-Paul Koch, Object detection
  39. Peter-Paul Koch, Mission Impossible – mouse position
  40. Peter-Paul Koch, Browser detect
  41. „JavaScript – JScript – ECMAScript version history”. Webmasterworld.com. Pristupljeno 30. 4. 2016. 
  42. Resig, John. „Versions of JavaScript”. Ejohn.org. Pristupljeno 30. 4. 2016. 
  43. „Version Information (JScript)”. Msdn.microsoft.com. Pristupljeno 30. 4. 2016. 
  44. „History of the Opera web browser”. www.opera.com. Pristupljeno 30. 4. 2016. 
  45. „What Version of JavaScript”. 

Spoljašnje veze[uredi]