Јаваскрипт

Из Википедије, слободне енциклопедије
(преусмерено са JavaScript)
Не поистовећивати са Јава (програмски језик).
Јаваскрипт
JavaScript-logo.png
Лого програмског језика Јаваскрипт
Оригинални назив енгл. JavaScript
Изговара се Џаваскрипт или Јаваскрипт
Модел скриптни, објектно-оријентисани (прототипни), императивни, функционални и вођен догађајима
Појавио се 4. децембар 1995. год.; пре 21 године (1995-12-04)[1]
Аутор(и) Брендан Ајк
Дизајнер(и) Нетскејп, Мозила Фондација, Ecma International
Актуелна верзија ECMAScript 2016[2]
Датум актуелне верзије 17. јун 2016. год.; пре 11 месеци (2016-06-17)
Систем куцања динамичко
Имплементације V8, ЈаваСкриптКор, SpiderMonkey, Chakra
Утицаји Луа, Scheme, Перл, Селф, Јава, Це, Пајтон, AWK, HyperTalk
Утицао на ActionScript, AtScript, CoffeeScript, Дарт, JScript .NET, LiveScript, Objective-J, Opa, Перл 6, QML, TypeScript,
Јаваскрипт
Екстензија фајла: .js
Развио: Брендан Ајк
Прво појављивање: 1995.
Тип формата: скриптни језик


Јаваскрипт или Џаваскрипт (енгл. JavaScript) је динамичан, слабо типизаран и интерпретиран програмски језик високог нивоа. Стандардизован је по ЕКМАСкрипт спецификацији језика. Поред HTML-а и CSS-а, Јаваскрипт је једна од три водеће технологије за дефинисање садржаја на Вебу; већина веб-сајтова користи Јаваскрипт а сви модерни веб-читачи га подржавају без потребе за инсталирањем додатака. Јаваскрипт је језик заснован на прототиповима са функцијама првог реда, што га чини језиком вишеструке парадигме који подржава објектно-оријентисани,[3] императивни и функционални начин програмирања. Садржи АПИ за рад са текстом, низовима, датумима и регуларним изразима, али не и улазно/излазне функционалности, као што су повезивање, складиштење података или графичке функционалности, за шта се ослања на окружење у коме се извршава.

Иако се на први поглед може рећи да Јаваскрипт има одређене сличности са програмским језиком Јава, као што су назив, синтакса и стандардне библиотеке, они су два потпуно различита програмска језика која се значајно разликују у свом дизајну. На програмски језик ЈаваСкрипт највише су утицали језици као што су Селф и Scheme.[4]

Јаваскрипт се поред Веба користи и у другим окружењима, као што су PDF документи, Веб-читачи за специфичне веб-сајтове (енгл. site-specific browsers) и десктоп виџети (енгл. widget). Нове и знатно брже ЈаваСкрипт виртуелне машине и платформе засноване на њима, популаризовале су ЈаваСкрипт за израду веб апликација на серверској страни. На клијентској страни, програмери најчешће имплементирају ЈаваСкрипт као интерпетирани језик, али све више новијих веб-читача обавља just-in-time компајлирање. Јаваскрипт се још користи и за развој видео игара, десктоп и мобилних апликација као и у мрежном програмирању на серверској страни са извршним окружењима као што је Node.js.

Историјат[уреди]

Почеци у Нетскејпу[уреди]

1993. године, Национални центар за суперкомпјутерске апликације (енгл. National Center for Supercomputing Applications - NCSA), који је део Универзитета у Илиноису, објавио је Мозаик, први популарни графички веб-читач, који је одиграо значајну улогу у развоју Веба који је у то време био на самом зачетку. 1994. године у Маунтин Вјуу, у Калифорнији, основана је компанија под називом Мозаик Комјуникејшн, која је запослила већину аутора оригиналног веб-читача Мозаик како би развили Мозаик Нетскејп. Касније ће се испоставити да овај веб-читач неће имати никакве сличности са оригиналним Мозаиком. Интерни назив за овај веб-читач био је "Мозила", што је значило "убица Мозаика" енгл. Mosaic killer, јер је циљ компаније био да замени Мозаик као најпопуларнији веб-читач на свету. Прва верзија веб-читача, Мозаик Нетскејп 0.9, објављена је крајем 1994. године. За само четири месеца овај веб-читач је већ заузео три четвртине тржишта веб-читача и постао је најпопуларнији веб-читач деведесетих година 20. века. Како би избегли проблеме са ауторским правима са НЦСА, веб-читач је исте године добио нов назив, Нетскејп навигатор, a компанија Нетскејп Комјуникејшн.

У овој компанији су на време схватили да би Веб требало да постане динамичнији. Оснивач компаније, Марк Андресен, тврдио је да HTML-у треба пратећи језик који веб дизајнери и програмери могу лако да користе за склапање компоненти као што су слике и додаци, чији би се код писао директно у HTML коду веб странице. Како би уопште започели са радом, компанија Нетскејп Комјуникејшн је морала да сарађује са компанијом Сан Мајкросистемс да би у овај веб-читач уградили њихов статични програмски језик Јаву и тиме се борили са конкурентском компанијом Мајкрософт за већу наклоност корисника и усвајање веб технологија и платформи.[5] Одлучено је да се креира програмски језик комплементаран Јави, са сличном синтаксом, што је у старту значило одбацивање подршке за друге програмске језике као што су Перл, Пајтон, TCL или Scheme. Како би одбранили идеју ЈаваСкрипта у односу на понуду конкурената, компаније је био потребан прототип. Ајк је написао прототип будућег програмског језика за 10 дана, у мају 1995. године.

Иако је развијан под кодним називом Мока, језик је званично назван ЛајвСкрипт приликом првог објављивања бета верзија Нетскејп навигатора 2.0, септембра 1995. године, али је убрзо преименован у ЈаваСкрипт[1] са објављивањем Нетскејп навигатора 2.0 бета 3 верзије, у децембру исте године.[6] Коначан избор имена је изазвао конфузију код корисника јер је створен утисак да је ово још једна варијанта програмског језика Јава, а сам избор имена је окарактерисан као маркетиншки трик Нетскејпа како би се ЈаваСкрипт представио као најновији веб програмски језик.

Често се јавља погрешно тумачење да је на развој ЈаваСкрипта битно утицао веб скриптни језик Ц-- развијен од стране компаније Номбас (овај скриптни језик не треба мешати са касније развијеним језиком Ц--, 1997. године]).[7][8] У прилог томе иде и чињеница да Брендан Ајк није никад чуо за Ц-- пре него што је креирао ЛајвСкрипт.[9] Номбас је обезбеђивао уграђене скриптне веб странице Нетскејпу, иако концепт скриптних веб страница није био нов, као што се може видети у веб-читачу ViolaWWW.[10] Касније је компанија Номбас одлучила да у свом производу СкриптИз, Ц-- замени ЈаваСкриптом и учествовала је у стандардизацији ЕКМАСкрипта кроз ТЦ39 групу.[11]

ЈаваСкрипт на серверској страни[уреди]

У децембру 1995. године, убрзо након објављивања ЈаваСкрипта за веб-читаче, компанија Нетскејп је представила и имплементацију овог језика за сервере кроз Нетскејп Ентерпрајз Сервер (енгл. Netscape Enterprise Server).

Од средине 2000-их, објављено је неколико серверских ЈаваСкрипт имплементација, међу којима најпознатији Node.js (2009. године).[12]

Прихватање ЈаваСкрипта од стране Мајкрософта[уреди]

Мајкрософт је 1996. године представио своје скриптне језике, ВБСкрипт и ЈСкрипт. ЈСкрипт, обрнута имплементација Нетскејповог ЈаваСкрипта, била је део Интернет Експлорера 3. ЈСкрипт је такође био доступан и као серверска имплементација скриптног језика у Интернет Информационом Серверу. Интернет Експлорер 3 је по први пут донео подршку за CSS и различите HTML додатке, али се водило рачуна о томе да свака имплементација буде значајно различита од оне у Нетскејп навигатору.[13][14] Ове разлике су отежавале дизајнерима и програмерима да креирају веб-сајтове који би функционисали у оба веб-читача, што је довело до појаве логоа "најбољи приказ у Нетскејпу" и "најбољи приказ у Интернет Експлореру" који су обележили почетне године борбе међу веб-читачима.[15] ЈаваСкрипт је почео да стиче репутацију препреке вишеплатформском и стандардизованом Вебу. Програмери су се прихватили задатка да покушају да креирају веб-сајтове који ће радити у оба најпознатија веб-читача иако већина није имала времена за то.[13] Објавом Интернет Експлорера 4, Мајкрософт је представио концепт динамичког HTML-а, али су разлике у имплементацији језика и различити власнички објектни модели докумената представљали препреке за ширу примену ЈаваСкрипта на Вебу.[13]

Стандардизација[уреди]

У новембру 1996. године, Нетскејп је стандардизовао ЈаваСкрипт како би остале компаније које развијају веб-читаче могле да га имплементирају у својим производима. То је довело до званичног објављивања спецификације језика ЕКМАСкрипт која је објављена у првој верзији ЕКМА-262 стандарда у јуну 1997. године, чија је најпознатија имплементација управо ЈаваСкрипт. ЕкшнСкрипт и ЈСкрипт су такође познате имплементације ЕКМАСкрипта са додацима.

Процес стандардизације је настављен у циклусима, објављивањем ЕКМАСкрипта 2 у јуну 1998. године, који доноси одређене промене како би се прилагодио ISO/IEC 16262 међународном стандарду. Са објављивањем је настављено у децембру 1999. године са ЕКМАСкриптом 3, који представња основу за ЈаваСкрипт какав данас знамо. Развој оригиналног ЕКМАСкрипта 4, који је водио Валдемар Хорват (тада запослени у Нетскејпу, данас у Гуглу), почео је 2000. године и на самом почетку је изгледало као да Мајкрософт учествује у томе па је чак и имплементирао неке карактеристике у њихов ЈСкрипт .НЕТ језик.

Временом је било јасно да Мајкрософт не намерава да сарађује нити да имплементира ЈаваСкрипт у ИнтернетЕксплореру, иако нису имали достојну алтернативу већ само парцијално завршену имплементацију .НЕТ серверске стране. Због тога је до 2003. године развој ЕКМАСкрипта 4 био запостављен.

Следећа битна година за ЈаваСкрипт била је 2005. са два велика историјска догађаја за развој ЈаваСкрипта. Прво су се Брендан Ајк и Мозила придружили ЕКМА Интернешнал као непрофитни чланови и започет је рад на ЕКМАСкрипту за XML (E4X), ЕКМА-357 стандарду, који је потекао од Мајкрософтових бивших запослених који су сад радили за БЕА Системс. То је довело до заједничког рада са компанијом Макромедија (коју је касније купио Адоби Системс), који су применили E4X у свом ЕкшнСкрипту 3 (ЕкшнСкрипт 3 је био форк оригиналног ЕКМАСкрипта 4).

Заједно са Макромедијом поново је отпочет развој ЕКМАСкрипта 4 са циљем стандардизације компоненти из ЕкшнСкрипта 3. На крају овог процеса, Адоби Системс је објавио ЕкшнСкрипт виртуелну машину верзије 2, кодног назива Тамарин, као пројекат отвореног кода. Међутим, Тамарин и ЕкшнСкрипт 3 су били значајно различити од онога чему ЈаваСкрипт тежи, што су обе стране увиделе током 2007. и 2008. године.

На тржишту је владао хаос међу различитим играчима. Даглас Крокфорд, тада запослени у Јаху-у, удружио се са Мајкрософтом 2007. године како би се супротставио ЕКМАСкрипт 4 стандарду, што је довело до развоја ЕКМАСкрипт 3.1 стандарда. Иако развој ЕКМАСкрипт 4 стандарда никад није довршен, он је битно утицао на наредне верзије.[16]

Док се све ово дешавало, заједнице отвореног кода и програмера су наставиле на развоју револуционарних могућности са ЈаваСкриптом. Напор заједнице је добио замајац 2005. године када је Џеси Џејмс Гарет осмислио концепт Ајакса и описао скуп технологија, где је ослонац био на ЈаваСкрипту, које се користе за креирање веб апликација код којих се подаци могу учитавати у позадини, без потребе да се цела страница учита, што је довело до развоја још динамичнијих апликација. Све ово је довело до периода препорода у коришћењу ЈаваСкрипта, предвођеног библиотекама отвореног кода и заједницама које су се формирале око њих, са библиотекама као што су Прототајп, џејКвери, Доџо Тулкит, МуТулс и друге.

У јулу 2008. године, раздвојене стране су се састале у Ослу. То је довело до евентуалног договора почетком 2009. године, да се ЕКМАСкрипт 3.1 стандард преименује у ЕКМАСкрипт 5 и да се језик унапреди пратећи агенду познатију као Хармони (енгл. Harmony). ЕКМАСкрипт 5 је коначно објављен у децембру 2009. године.

У јуну 2011. године, ЕКМАСкрипт 5.1 је објављен како би се у потпуности изједначио са трећим издањем ISO/IEC 16262 међународног стандарда. ЕКМАСкрипт 2015 је објављен у јуну 2015. године. Тренутна верзија ЕКМАСкрипт 2016 је објављена у јуну 2016. године.[17]

Каснији развој[уреди]

ЈаваСкрипт је постао један од најпопуларнијих програмских језика на Вебу. Међутим, на самом почетку језик није био на добром гласу међу програмерима професионалцима, због тога што су му, између осталог, циљна публика били веб аутори и остали "аматери".[18] Са појавом Ајакса ЈаваСкрипт се враћа у центар пажње и постаје атрактиван за све више програмера. Резултат тога је умножавање обимних фрејмворка и библиотека, побољшана ЈаваСкрипт рутина програмирања и повећано коришћење ЈаваСкрипта изван веб-читача, што је у директној корелацији са значајним развојем серверских ЈаваСкрипт платформи.

У јануару 2009. године, представљен је пројекат КомонЈС (енгл. CommonJS) са циљем стандардизације заједничких библиотека, углавном за ЈаваСкрипт развој изван веб-читача.[19]

Са порастом једностраничних апликација и напредних ЈаваСкрипт сајтова, повећано је његово коришћење од стране компајлера како за динамичке тако и за статичке програмске језике.

Заштитни знак[уреди]

"ЈаваСкрипт" је заштитни знак Оракл Корпорације.[20] Корити се под лиценцом за технологију коју је осмислила и имплементирала компанија Нетскејп Комјуникејшн и њени наследници као што је Мозила фондација.[21]

Карактеристике[уреди]

Наведене карактеристике су заједничке за све ЕКМАСкрипт имплементације, осим ако није експлицитно другачије наведено.

Универзална подршка[уреди]

Сви модерни вебчитачи подржавају ЈаваСкрипт са уграђеним интерпретерима.

Императивни и структурирани[уреди]

ЈаваСкрипт подржава већи део структуриране синтаксе програмског језика C (нпр. if исказе, while петље, switch исказе, do while петље, и др.). Делимичан изузетак је опсег променљивих: ЈаваСкрипт је у оригиналу подржавао само функционални опсег променљивих помоћу декларације var. ЕКМАСкрипт 2015 доноси кључну реч let за блоковски опсег, тако да сада ЈаваСкрипт подржава функционални и блоковски опсег. Као и C, ЈаваСкрипт прави разлику између исказа и израза. Још једна битна разлика у односу на C је и аутоматско уметање краја наредбе односно карактера тачка-зарез, па није потребно експлицитно наглашавати крај наредбе са знаком тачка-зарез.[22]

Динамични[уреди]

Куцање
Као и већина скриптних језика, Јаваскрипт је језик са динамичном провером куцања; тип је повезан са сваком вредношћу пре него са свакоим изразом. На пример, уколико имамо неку променљиву која је везана за број, та иста променљива касније може бити везана за стринг.[23] ЈаваСкрипт подржава различите начине провере типа објекта.
Провера приликом извршавања
ЈаваСкрипт садржи eval која може да извршава исказе у облику стрингова у време извршавања.

Прототипни (објектно-оријентисани)[уреди]

Јаваскрипт је скоро у потпуности објектно заснован скриптни језик. У ЈаваСкрипту, објекат представља асоцијативни низ, наглашен помоћу прототипа; сваки кључ у облику низа карактера представља назив својства објекта за који постоји два синтаксна начин за дефинисање таквог назива; нотација са тачком, енгл. dot notation (obj.x = 10) и нотација са заградама, енгл. bracket notation (obj['x'] = 10). Својство се може додати или обрисати за време изврашавања кода. Већина својстава објекта (или било ког својства које припада ланцу наслеђивања прототипа објекта) се може набројати коришћењем for...in петље. ЈаваСкрипт садржи ограничен број уграђених објеката, као што су Date и Function.

Прототипови
ЈаваСкрипт користи прототипове у случајевима у којима други објектно-оријентисани програмски језици користе класе за наслеђивање.[24] Помоћу прототипова у ЈаваСкрипту је могуће симулирате многе карактеристике класа.[25]
Функције као конструктори објеката
Функције осим своје главне функције, имају и улогу конструктора објеката. Додавањем префикса new испред позива функције, креира нову инстанцу прототипа, наслеђујући својства и методе конструктора (уклјучујући и својства Object прототипа).[26] ЕКМАСкрипт 5 садржи методу Object.create, која омогућава експлицитно креирање инстанце без аутоматског наслеђивања Object прототипа (старија окружења могу додељивати прототипу вредност null).[27] Својство prototype конструктора одређује који објекат се користи као интерни прототип новог објекта. Нове методе се могу додати изменом прототипа функције која се користи као конструктор. Конструктори доступни у самом ЈаваСкрипту, као што су Array и Object, такође имају своје прототипове који могу да се измене. Иако могућа, измена Object прототипа није добра пракса због тога што већина објеката у ЈаваСкрипту наслеђује методе и својства из Object прототипа и потенцијално не очекују његову измену.[28]
Функције као методе
За разлику од већине објектно-оријентисаних језика, у ЈаваСкрипту не постоји разлика између дефинисања функција и дефинисања метода. Најчешће, разлика постоји код позивања функције; када се функција позива као метода објекта, њена локална кључна реч this се везује за тај објекат приликом позивања.

Функционални[уреди]

Функција је прве класе и може се третирати као објекат. Као таква, функција може да садржи својства и методе, као што је .call() и .bind().[29] Угњеждена функција је функција која се дефинише унутар друге функције. Оваква функција се креира сваки пут када се позове надређена функција. Додатно, свака надређена функција формира лексички блок; Лексички блок надређене функције (укључујући константе, локалне променљиве и вредности аргумената) постају саставни део сваког објекта подређене функције, чак и након завршетка извршавања надређене функције.[30] ЈаваСкрипт подржава и анонимне функције.

Делегирани[уреди]

ЈаваСкрипт подржава имплицитно и експлицитно делегирање.

Функције као улоге (Traits и Mixins)
ЈаваСкрипт подразумевано подржава различите функције имплементиране у виду улога (енгл. Roles)[31] и патерна као што су Traits[32][33] и Mixins.[34]

Синтакса[уреди]

Једноставнији примери[уреди]

Променљиве се у Јаваскрипт-у дефинишу са кључном речи var. [35]

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

Коментари се у Јаваскрипт-у пишу на следећи на следећи начин.

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

За испис текста на екрану, користи се објекат конзоле. У примеру је дато исписивање текста Здраво Свете.

console.log("Zdravo Svete.");

Искази if, else и 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...");
}

Једноставна рекурзивна функција која рачуна факторијел.

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

Пример анонимне функције

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

Напреднији пример[уреди]

Овај узорак кода приказује разне Јаваскрипт функције.

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());
});

Употреба у интернет страницама[уреди]

Најчешћа употреба Јаваскрипт-а је додавање динамичности HTML страницама на клијентској страни. Скрипте се укључују у HTML странице и врше интеракцију са објектним моделом докумената (енгл. Document Object Model). Неки од примера употребе Јаваскрипт-а су:

  • Учитавање одређеног дела странице или достављање података серверу преко АЈАКСА (engl. AJAX) без поновног освежавања целе странице (на пример друштвена мрежа вам омогућава ажурирање новог статуса без освежавања целе странице).
  • Анимирање елемената на страници, чинећи их видљивим и невидљивим, мења елементима величину, помера њихов садржај.
  • Убацивање интерактивног садржаја (на пример видео клипова, анимација, видео игрица, аудио садржаја...)
  • Валидација унетог садржаја унутар форми, како би били сигурни да су исправни подаци послати серверу.

Интернет претраживач је најчешће окружење за извршавање Јаваскрипт кода. Интернет претраживачи обично креирају хост објекте за представљање објектног модела докумената у Јаваскрипт-у. Поред интернет претраживача, Јаваскрипт код се може извршити и на серверу.[37]

Једноставна скрипта[уреди]

Испод је минималистички пример интернет странице која користи Јаваскрипт и објектни модел докумената.

<!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>

Компатибилност[уреди]

С обзиром да ЈаваСкрипт код може да се изврши у различитим окружењима, важан део тестирања кода је и провера да ли Јаваскрипт код ради на више различитих претраживача.

Интерфејс објектног модела докумената за манипулацију са интернет страницама није део Екмаскрипт стандарда односно самог Јаваскрипт-а, већ је дефинисан посебним стандардом. У пракси, имплементација интернет претраживача се разликује у стандардима, и самим тим не извршава сваки претраживач Јаваскрипт код исто.

Да би се ове разлике анулирале, Јаваскрипт програмери могу да покушају да напишу код који ће се у већини претраживача извршавати исто. Ако се не изврши, могуће је написати код који проверава присуство одређених вункција претраживача.[38] У неким случајевим, два претраживача могу извршити исту функцију али са различитим исходом. Тако да програмер може практично открити шта претраживач ради и сходно томе изменити своју скрипту како би је претраживач извршио на одговарајући начин.[39][40]

Осим тога, скрипте не могу да раде за одређене кориснике. На пример корисник може да:

  • Користи стари или редак интернет претраживач са непотпуном или необичном подршком за објектни модел докумената.
  • Користи ПДА (engl. personal digital assistant) или претраживач на мобилном телефону који не може да изврши Јаваскрипт код.
  • Да има онемогућено извршавање Јаваскрипт-а као меру предострожности.

Како би помогли овим корисницима, програмери могу да направе интернет странице које деградирају претраживаче да не користе Јаваскрипт. Конкретно, страна би требала остане употребљива без додатних елемената Јаваскрипт-а. Алтернативни приступ решавању овог проблема јесте да први аутор садржаја користи основне технологије које раде у свим претраживачима, а затим побољша садржај намењен корисницима који подржавају Јаваскрипт. Ово је познато као прогресивно побољшање.

Историјат верзија[уреди]

Следећа табела се заснива на информацијама из више извора.[41][42][43]

Верзија Датум Еквивалентно са Нетскејп
Навигатор
Мозила
Фајерфокс
Интернет
Експлорер
Опера Сафари Гугл
Хром
1.0 Март 1996 2.0 3.0
1.1 Август 1996 3.0
1.2 Јун 1997 4.0-4.05 3[44]
1.3 Октобар 1998 ЕКМА (енгл. ECMA)-262 1. + 2. издање 4.06-4.7x 4.0 5[45]
1.4 Нетскејп
Сервер
6
1.5 Новембар 2000 ЕЦМА-262 3. издање 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 Новембар 2005 1.5 + додаци низовима + генератори низова и стрингова + E4X 1.5
1.7 Октобар 2006 1.6 + пајтон генератори + итератори + дозволе 2.0 28.0.1500.95
1.8 Јун 2008 1.7 + генератори израза + затварачи израза 3.0 11.50
1.8.1 1.8 + подршка за Џејсон(енгл. JSON) + мањи додаци 3.5
1.8.2 Јун 22, 2009 1.8.1 + мањи додаци 3.6

Референце[уреди]

  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. стр. 4. Приступљено 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. Приступљено 23. 03. 2013.  Проверите вредност парамет(а)ра за датум: |date= (помоћ)
  6. „TechVision: Innovators of the Net: Brendan Eich and JavaScript”. web.archive.org. Архивирано из оригинала на датум 08. 02. 2008. 
  7. „The History of Programming Languages”. oreilly.com. O'Reilly Media. 2004. Приступљено 16. 07. 2016. 
  8. „What Is JavaScript?” (PDF). wiley.com. Wiley. Приступљено 16. 07. 2016. 
  9. Noorda, Brent (21. 09. 2013). „Brent Noorda's Answers on ECMA”. quora.com. Приступљено 16. 07. 2016. 
  10. Noorda, Brent (24. 06. 2010). „History of Nombas”. brent-noorda.com. Приступљено 16. 07. 2016. 
  11. Eich, Brendan (21. 06. 2011). „New JavaScript Engine Module Owner”. brendaneich.com. Приступљено 16. 07. 2016. 
  12. Netscape Communications Corporation (11. 12. 1998). „Server-Side JavaScript Guide”. oracle.com. Netscape Communications Corporation. Приступљено 16. 07. 2016. 
  13. 13,0 13,1 13,2 Champeon, Steve (6. 04. 2001). „JavaScript, How Did We Get Here?”. oreilly.com. Приступљено 16. 07. 2016. 
  14. „Microsoft Internet Explorer 3.0 Beta Now Available”. microsoft.com. Microsoft. 29. 05. 1996. Приступљено 16. 07. 2016. 
  15. McCracken, Harry (16. 09. 2010). „The Unwelcome Return of "Best Viewed with Internet Explorer". technologizer.com. Приступљено 16. 07. 2016. 
  16. „Documentation”. ecmascript.org. Приступљено 16. 07. 2016. 
  17. „Standard ECMA-262, ECMAScript® 2016 Language Specification”. ecma-international.org. June 2016. Приступљено 16. 07. 2016.  Проверите вредност парамет(а)ра за датум: |date= (помоћ)
  18. Crockford, Douglas (2001). „JavaScript, The World's Most Misunderstood Programming Language”. crockford.com. Приступљено 16. 07. 2016. 
  19. Kowal, Kris (1. 12. 2009). „CommonJS Effort Sets JavaScript on Path for World Domination”. arstechnica.com. Приступљено 16. 07. 2016. 
  20. „USPTO Copyright entry #75026640”. USPTO. 
  21. „Sun Trademarks”. Sun Microsystems. Архивирано из оригинала на датум 28. 05. 2010. Приступљено 08. 11. 2007. 
  22. Flanagan (2006). стр. 16.
  23. „JavaScript data types and data structures - JavaScript | MDN”. Developer.mozilla.org. 16. 02. 2017. Приступљено 24. 02. 2017. 
  24. „Inheritance and the prototype chain”. Mozilla Developer Network. Mozilla. Приступљено 6. 04. 2013. 
  25. Herman, David (2013). Effective JavaScript. Addison-Wesley. стр. 83. ISBN 978-0-321-81218-6. 
  26. Haverbeke, Marijn (2011). Eloquent JavaScript. No Starch Press. стр. 95—97. ISBN 978-1-59327-282-1. 
  27. Katz, Yehuda. „Understanding "Prototypes" in JavaScript”. Приступљено 6. 04. 2013. 
  28. Herman, David (2013). Effective JavaScript. Addison-Wesley. стр. 125—127. ISBN 978-0-321-81218-6. 
  29. „Properties of the Function Object”. Es5.github.com. Приступљено 26. 05. 2013. 
  30. Flanagan (2006). стр. 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. Приступљено 24. 02. 2017. 
  34. Angus Croll, A fresh look at JavaScript Mixins, published May 31, 2011.
  35. „var – JavaScript – MDN”. The Mozilla Developer Network. Приступљено 30. 4. 2016. 
  36. Грешка цитата: Лоша ознака <ref>; нема текста за ref-ове под именом ref1.
  37. „JavaScript tracking – Piwik”. Piwik. Приступљено 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. Приступљено 30. 4. 2016. 
  42. Resig, John. „Versions of JavaScript”. Ejohn.org. Приступљено 30. 4. 2016. 
  43. „Version Information (JScript)”. Msdn.microsoft.com. Приступљено 30. 4. 2016. 
  44. „History of the Opera web browser”. www.opera.com. Приступљено 30. 4. 2016. 
  45. „What Version of JavaScript”. 

Спољашње везе[уреди]