JavaScript | |
---|---|
Clasa de limba |
multi- paradigma : orientat pe obiect ( prototipic ), generalizat , funcțional , imperativ , orientat pe aspect , programare bazată pe evenimente |
Tipul de execuție | interpretare, traducere în bytecode Java [ 1] , JIT în cod nativ [2] |
Aparut in | 1995 |
Autor | Brendan Eich |
Extensie de fișier | .js, .cjs, .mjs[Спецификация 1] |
Eliberare | ECMAScript 2022 [3] (iunie 2022 ) |
Tip sistem | dinamic , rață |
Implementări majore | SpiderMonkey , Rhino , KJS (JavaScript) , JavaScriptCore , V8 |
A fost influențat | Lua , Self [4] , C , Scheme [4] , Perl [4] , Python , Java [4] , AWK [4] , HyperTalk [4] |
influențat | Objective-J , Dart , TypeScript |
Fișiere media la Wikimedia Commons |
JavaScript | |
---|---|
Extensie | .js[7] |
tip MIME | text/javascript, aplicație/javascript [5] [6] |
publicat | septembrie 1995 [8] |
Tip de format | fișier text cu cod sursă |
Extins din | ECMAScript |
Fișiere media la Wikimedia Commons |
JavaScript ( / ˈ dʒ ɑː v ɑː ˌ s k r ɪ p t / ; abreviat JS /ˈdʒeɪ.ɛs./ ) este un limbaj de programare cu mai multe paradigme . Suportă stiluri orientate pe obiecte , imperative și funcționale . Este o implementare a specificației ECMAScript (standard ECMA-262 [9] ).
JavaScript este folosit în mod obișnuit ca limbaj încorporabil pentru accesul programatic la obiectele aplicației . Este cel mai larg utilizat în browsere ca limbaj de scripting pentru a face pagini web interactive [10] .
Principalele caracteristici arhitecturale: tastare dinamică , tastare slabă , management automat al memoriei , programare prototipală , funcții ca obiecte de primă clasă .
JavaScript a fost influențat de multe limbi, iar scopul a fost de a face limbajul similar cu Java. JavaScript nu este deținut de nicio companie sau organizație, ceea ce îl deosebește de o serie de limbaje de programare utilizate în dezvoltarea web [~ 1] [11] .
Numele „JavaScript” este o marcă comercială înregistrată în SUA a Oracle Corporation [12] .
În 1992, Nombas ( achiziționat ulterior de Openwave ) a început să dezvolte un limbaj de scripting incorporabil Cmm (C-minus-minus), care, conform dezvoltatorilor, trebuia să fie suficient de puternic pentru a înlocui macrocomenzile , păstrând în același timp asemănarea cu C. , astfel încât dezvoltatorii să-l poată învăța cu ușurință [13] . Principala diferență față de C a fost gestionarea memoriei. În noua limbă, toată gestionarea memoriei a fost efectuată automat: nu a fost nevoie să se creeze buffere , să se declare variabile și să se efectueze conversie de tip. În alte privințe, limbajele erau foarte asemănătoare între ele: în special, Cmm suporta funcții standard și operatori C [14] . Cmm a fost redenumit ScriptEase pentru că numele inițial suna prea negativ, iar mențiunea lui C în el a „speriat” oamenii [13] [15] . Pe baza acestui limbaj, a fost creat produsul proprietar CEnvi . La sfârșitul lui noiembrie 1995, Nombas a dezvoltat o versiune de CEnvi care este încorporată în paginile web. Paginile care puteau fi modificate folosind limbajul de scripting s-au numit Espresso Pages , care a demonstrat utilizarea limbajului de scripting pentru a crea un joc, a valida introducerea utilizatorului în formulare și a crea animații. Espresso Pages a fost poziționat ca o demonstrație pentru a vă ajuta să vă imaginați ce s-ar întâmpla dacă limbajul Cmm ar fi implementat în browser . Au funcționat doar în Netscape Navigator pe 16 biți sub Windows [16] .
Prima implementare JavaScript a fost creată de Brendan Eich la Netscape și de atunci a fost actualizată pentru a se conforma cu ECMA-262 Ediția 5 și mai târziu. Acest motor se numește SpiderMonkey și este implementat în C/ C++ . Motorul Rhino a fost creat de Norris Boyd și implementat în Java. La fel ca SpiderMonkey , Rhino respectă ECMA-262 Edition 5.
Brendan Eich , angajat de Netscape pe 4 aprilie 1995 [18] , a fost însărcinat să aducă limbajul de programare Scheme , sau ceva similar, în browserul Netscape. Pe măsură ce cerințele au fost estompate, Eich a fost mutat în grupul Server Products, unde a petrecut o lună lucrând la îmbunătățirea protocolului HTTP [18] . În mai, dezvoltatorul a fost transferat înapoi în echipa client (browser), unde a început imediat să dezvolte conceptul unui nou limbaj de programare. Managementul dezvoltării browserului, inclusiv Tom Paquin , Michael Toy , Rick Schell , au fost convinși că Netscape ar trebui să accepte un limbaj de programare încorporat în codul HTML al paginii [ 19 ] .
În plus față de Brendan Eich, [18 ] co -fondatorul Netscape Communications [20] Mark Andressen și co-fondatorul Sun Microsystems Bill Joy au participat la dezvoltare : pentru a avea timp să termine munca la limbajul pentru lansarea browserului. , companiile au încheiat un acord de cooperare pentru dezvoltare [21] . Ei și-au propus scopul de a oferi un „limbaj pentru lipirea” părților constitutive ale unei resurse web: imagini, plug-in-uri, applet-uri Java, care ar fi convenabil pentru web designeri și programatori care nu au calificări înalte [18] .
Limbajul a fost inițial numit Mocha [23] [24] [25] la sugestia lui Mark Andreessen [22] , a fost implementat de Brendan Eich în zece zile și a fost inclus pentru prima dată în versiunea pre-alfa a Netscape 2 [22] . Apoi a fost redenumit LiveScript [25] [26] și a fost destinat atât programării pe partea client, cât și pe partea serverului (unde urma să fie numit LiveWire) [21] . Sintaxa a fost influențată de limbajele C și Java și, din moment ce Java era un cuvânt la modă la acea vreme [18] [21] , LiveScript a fost redenumit JavaScript [27] pe 4 decembrie 1995, sub licență de la Sun. Anunțul JavaScript făcut de reprezentanții Netscape și Sun a avut loc în ajunul lansării celei de-a doua versiuni beta a Netscape Navigator [18] . Acesta declară că 28 de companii IT de top și-au exprimat intenția de a folosi JavaScript ca limbaj de scriptare obiect standard deschis în produsele lor viitoare [28] .
În 1996, Microsoft a lansat un analog al limbajului JavaScript numit JScript . Această limbă a fost anunțată la 18 iulie 1996 [29] . Primul browser care a susținut această implementare a fost Internet Explorer 3.0.
La inițiativa Netscape [30] [31] , limbajul a fost standardizat de asociația ECMA . Versiunea standardizată se numește ECMAScript , descrisă de standardul ECMA-262 . Prima versiune a specificației corespundea versiunii JavaScript 1.1, precum și limbajelor JScript și ScriptEasy [13] [21] .
În limbajul de programare cel mai greșit înțeles din lume a devenit cel mai popular limbaj de programare din lume [ 32] , Douglas Crockford susține că JavaScript a preluat poziția de lider datorită dezvoltării AJAX , deoarece browserul a devenit sistemul de livrare a aplicațiilor predominant. El observă, de asemenea, popularitatea tot mai mare a JavaScript, faptul că acest limbaj este încorporat în aplicații, subliniază importanța limbajului.
Conform indexului TIOBE , bazat pe Google , MSN , Yahoo! , Wikipedia și YouTube , în aprilie 2015 JavaScript era pe locul 6 (acum un an - pe locul 9) [33] .
Potrivit Black Duck Software [34] , utilizarea JavaScript a fost în creștere în dezvoltarea de software open source . 36% dintre proiectele lansate între august 2008 și august 2009 implică JavaScript, cel mai des folosit limbaj de programare, cu o popularitate în creștere rapidă. 80% din software-ul open source utilizează C, C++, Java, Shell și JavaScript. Cu toate acestea, JavaScript este singura dintre aceste limbi a cărei cotă de utilizare a crescut (mai mult de 2 procente, dacă numărați în rânduri de cod) [35] .
JavaScript este cel mai popular limbaj de programare folosit pentru a dezvolta aplicații web la nivelul clientului [36] [37] .
JavaScript este un limbaj orientat pe obiecte , dar prototipul folosit în limbaj [38] [39] provoacă diferențe în lucrul cu obiecte în comparație cu limbajele tradiționale orientate spre clasă. În plus, JavaScript are o serie de proprietăți inerente limbajelor funcționale - funcționează ca obiecte de primă clasă , obiecte ca liste, curry , funcții anonime , închideri [40] - care oferă limbajului o flexibilitate suplimentară.
În ciuda sintaxei similare cu C, JavaScript are diferențe fundamentale în comparație cu limbajul C :
Limbului îi lipsesc lucruri atât de utile [41] precum:
Sintaxa JavaScript este foarte asemănătoare cu cea a C și Java , dar din punct de vedere semantic limbajul este mult mai aproape de Self , Smalltalk sau chiar Lisp [32] [42] [Specificația 2] .
În JavaScript:
Din punct de vedere structural, JavaScript poate fi reprezentat ca o uniune a trei părți distincte [43] [44] [45] [46] :
Când luați în considerare JavaScript în medii non-browser, este posibil ca modelul obiect browser și modelul obiect document să nu fie acceptate [45] .
Document Object Model este uneori considerat ca o entitate separată de JavaScript [47] [48] [Specificația 3] , ceea ce este în concordanță cu definiția DOM ca interfață de document independentă de limbaj [49] [~ 3] . În contrast, un număr de autori consideră că BOM și DOM sunt strâns legate [50] [51] .
CoreECMAScript nu este un limbaj de browser și nu definește metode de intrare și ieșire [43] . Este mai degrabă baza pentru construirea limbajelor de scripting. Specificația ECMAScript descrie tipuri de date, instrucțiuni, cuvinte cheie, cuvinte rezervate , operatori , obiecte, expresii regulate , fără a restricționa autorii limbajelor derivate de a le extinde cu noi componente.
Model obiect browserModelul obiect al browserului este o parte specifică browserului a limbajului [45] [52] care este un strat între nucleu și modelul obiect al documentului [53] . Scopul principal al modelului obiect al browserului este de a gestiona și interacționa cu ferestrele browserului. Fiecare dintre ferestrele browserului este reprezentată de un obiect window, obiectul DOM central. Modelul obiect browser nu este în prezent standardizat [45] [54] , dar o specificație este în curs de dezvoltare de către WHATWG [53] [Spec 4] și W3C [44] [Spec 5] .
Pe lângă gestionarea ferestrelor, în cadrul modelului obiect al browserului, browserele oferă de obicei suport pentru următoarele entități [53] [54] :
Document Object Model este o interfață de programare a aplicațiilor pentru documente HTML și XML [55] . Conform DOM, un document (de exemplu, o pagină web) poate fi reprezentat ca un arbore de obiecte care au o serie de proprietăți care vă permit să efectuați diverse manipulări cu acesta:
Pentru a adăuga cod JavaScript la o pagină, puteți utiliza etichetele <script></script>[Specificație 6] , care sunt recomandate, dar nu obligatorii, plasate în interiorul <head>. Într-un document poate exista orice număr de containere <script>. Atributul type="text/javascript"este opțional, această valoare este folosită implicit [56] .
Un script care afișează o fereastră modală cu inscripția clasică „Hello, World!” în interiorul browserului:
< script type = "application/javascript" > alert ( 'Buna ziua, lume!' ); </ script >
Specificația HTML descrie un set de atribute utilizate pentru a defini gestionatorii de evenimente [Specificația 7] . Exemplu de utilizare:
< a href = "delete.php" onclick = "confirm('Ești sigur?'); return false;" > Șterge </a> _ _În exemplul de mai sus, când faceți clic pe link, funcția confirm('Вы уверены?');afișează o fereastră modală cu inscripția „Ești sigur?”, dar return false;blochează tranziția către link. Desigur, acest cod va funcționa numai dacă browserul are și suportul JavaScript activat, altfel linkul va fi urmat fără avertisment.
Utilizarea codului JavaScript în contextul markupului paginii este considerată o practică proastă în JavaScript discret . Analogic (cu condiția ca legătura să fie furnizată cu un identificator alertLink)
<a id="alertLink"> _ _ _ _ Șterge </a> _ _Exemplul de mai sus ar putea fi, de exemplu, următorul fragment JavaScript:
fereastra . onload = () => { const linkWithAlert = document . getElementById ( 'alertLink' ); linkWithAlert . addEventListener ( 'click' , async () => { if ( confirma ( 'Ești sigur?' )) { await fetch ( 'delete' , { method : 'DELETE' }) } }) }; Mutarea într-un fișier separatExistă o a treia modalitate de a conecta JavaScript - scrieți un script într-un fișier separat și apoi conectați-l folosind construcția
< body > < script type = "application/javascript" src = "http://Path_to_coscript_file" > </ script > </ body > Atributele elementului de scriptElementul de script, utilizat pe scară largă pentru a se conecta la o pagină JavaScript, are mai multe atribute.
Propunerea de lucru RFC-4329 care definește [57] un tip MIME conform cu JavaScript afirmă :
tipuri de media
care sunt, de asemenea, definite în acest document sunt destinate utilizării practice și ar trebui să fie preferate.
Text original (engleză)[ arataascunde] Utilizarea tipului de nivel superior „text” pentru acest tip de conținut este cunoscută a fi problematică. Astfel, acest document le definește text/javascriptși text/ecmascriptle marchează ca fiind „învechite”. Utilizarea tipurilor de media experimentale și neînregistrate, așa cum sunt enumerate în parte mai sus, este descurajată.tipurile media,
În același timp, language="JavaScript"atributul limbaj ( ) , în ciuda utilizării sale active (în 2008, acest atribut a fost cel mai des folosit atribut pentru eticheta <script>[58] ), este depreciat, nu se află în DTD și, prin urmare, este considerat incorect [ 59] .
JavaScript este utilizat în partea client a aplicațiilor web: programe client-server în care browserul este clientul și serverul web este serverul, având logica distribuită între server și client. Schimbul de informații în aplicațiile web are loc prin rețea. Un avantaj al acestei abordări este faptul că clienții sunt independenți de sistemul de operare al utilizatorului, astfel încât aplicațiile web sunt servicii multiplatforme.
AJAXJavaScript este utilizat în AJAX , o abordare populară pentru construirea de interfețe interactive de utilizator pentru aplicații web, care implică o comunicare asincronă „de fundal” între browser și serverul web. Ca urmare, la actualizarea datelor, pagina web nu se reîncarcă complet, iar interfața aplicației web devine mai rapidă decât ar fi cu abordarea tradițională (fără a utiliza AJAX).
CometaComet este un concept larg care descrie modul în care funcționează aplicațiile web folosind conexiuni HTTP persistente, care permite unui server web să trimită date către un browser fără nicio solicitare suplimentară din partea browserului. Aceste aplicații folosesc tehnologii suportate direct de browsere. În special, folosesc pe scară largă JavaScript.
Sisteme de operare browserJavaScript este utilizat pe scară largă în sistemele de operare ale browserului . Deci, de exemplu, codul sursă IndraDesktop WebOS este 75% JavaScript, codul sistemului de operare al browserului IntOS este 70%. Ponderea JavaScript în codul sursă al eyeOS este de 5%, totuși, chiar și în cadrul acestui sistem de operare, JavaScript joacă un rol important, participând la randarea pe client și fiind un mecanism necesar pentru comunicarea dintre client și server [60]. ] .
JavaScript este folosit pentru a crea programe mici care sunt marcate în browser. Aceasta utilizează adrese URL cu specificatorul javascript:[61] .
Scripturile de utilizator ale browserului sunt programe JavaScript care rulează în browserul utilizatorului atunci când o pagină este încărcată. Acestea vă permit să completați automat formulare, să reformatați paginile, să ascundeți conținutul nedorit și să încorporați conținutul pe care doriți să-l afișați, să schimbați comportamentul părții client a aplicațiilor web, să adăugați controale la pagină și așa mai departe.
Mozilla Firefox folosește extensia Greasemonkey pentru a gestiona scripturile utilizatorului ; Opera [62] [63] [64] și Google Chrome [65] oferă suport pentru scripturile utilizatorului și capacitatea de a executa o serie de scripturi Greasemonkey.
Aplicațiile scrise în JavaScript pot rula pe servere care rulează Java 6 și mai târziu [66] . Această circumstanță este folosită pentru a construi aplicații de server care permit procesarea JavaScript pe partea serverului.
Pe lângă Java 6, există o serie de platforme care utilizează motoarele JavaScript existente (interpreți) pentru a rula aplicații server. (De regulă, vorbim despre reutilizarea motoarelor create anterior pentru a executa cod JavaScript în browserele WWW.)
Cadre de execuție a aplicațiilor JavaScript ServerNume | Motorul JavaScript folosit | Limbi în care sunt scrise motorul și platforma | Licență |
---|---|---|---|
Jaxer [67] | Maimuță păianjen [68] | C++, C | GPL 3 [69] |
cadru perseverent [70] | Rinocer | Java | Licență BSD modificată [71] |
Helma [72] | Rinocer | Java, JavaScript | Licență Helma 2.0 asemănătoare BSD [73] |
v8cgi | V8 | C++, JavaScript | Licență BSD [74] |
node.js | V8 | C++ | Licență MIT [75] |
gopherjs | merge | merge | Licență BSD |
JavaScript de pe partea de server este folosit în proiectele Google [76] . De exemplu, Google Sites permite personalizarea folosind scripturi JavaScript executate de motorul Rhino [77] .
Tranziția dispozitivelor mobile Palm pentru a utiliza Palm webOS ca sistem de operare cu Mojo SDK ca kit de dezvoltare [78] permite ca JavaScript să fie folosit ca limbaj de dezvoltare a aplicațiilor mobile [79] [80] .
Un widget este un mini-program auxiliar, al cărui modul grafic este plasat în spațiul de lucru al programului părinte corespunzător , care servește la decorarea spațiului de lucru, la distracție, la rezolvarea sarcinilor individuale de lucru sau la obținerea rapidă de informații de pe Internet fără folosind un browser web. JavaScript este folosit atât pentru a implementa widget-uri, cât și pentru a implementa motoarele de widget-uri. În special, Apple Dashboard , Microsoft Gadgets , Yahoo! Widgeturi , Google Gadgets , Klipfolio Dashboard .
JavaScript este folosit pentru a scrie aplicații software . De exemplu, 16,4% din codul sursă Mozilla Firefox este scris în JavaScript.
Google Chrome OS folosește aplicații web ca aplicații software [81] .
Mediul desktop GNOME are capacitatea de a crea programe JavaScript care operează pe bibliotecile GNOME folosind Gjs , Seed [82] .
JavaScript găsește, de asemenea, utilizare ca limbaj de scripting pentru accesarea obiectelor aplicației. Platforma Mozilla ( XUL / Gecko ) folosește JavaScript. Printre produsele terțe, de exemplu, Java a inclus un interpret JavaScript încorporat bazat pe Rhino încă din versiunea 6 [66] . Scripturile JavaScript sunt acceptate în aplicațiile Adobe, cum ar fi Adobe Photoshop , Adobe Dreamweaver , Adobe Illustrator și Adobe InDesign .
JavaScript este folosit în aplicațiile de birou pentru a automatiza acțiunile de rutină, pentru a scrie macrocomenzi și pentru a organiza accesul de la serviciile web.
Microsoft OfficeExcel Services 2010 a adăugat [83] două noi interfețe de programare a aplicațiilor: REST API și JavaScript Object Model ( JSOM ).
JavaScript este unul dintre limbajele de programare utilizate pentru scrierea macrocomenzilor în aplicațiile care fac parte din OpenOffice.org [85] . OpenOffice.org integrează interpretul Rhino JavaScript [86] . Din decembrie 2009, suportul JavaScript era limitat. Limitări inerente [86] dezvoltării macrocomenzilor OpenOffice.org în JavaScript:
OpenOffice.org are un editor și un depanator JavaScript [87] .
JavaScript are valoare propedeutică , permițând o combinație între practica intensivă de programare și amploarea tehnologiilor utilizate în predarea informaticii [88] . Predarea acestui limbaj la școală vă permite să creați o bază pentru învățarea programarii web , să utilizați proiecte creative în clasă [89] . Cursul corespunzător vă permite să oferiți un nivel aprofundat de studiu al informaticii și are sens să îl includeți în cursurile opționale de un nivel aprofundat de pregătire [90] .
JavaScript este un limbaj potrivit pentru a învăța programarea jocurilor . În comparație cu alternativele, este suficient din punct de vedere funcțional, ușor de învățat și utilizat, reduce complexitatea învățării, motivează cursanții să-și împărtășească jocurile cu ceilalți [91] .
Părți despre implementarea în JavaScript a algoritmilor , tehnicilor, structurilor de date clasice, neincluse în cartea lui Nicholas Zakas „Professional JavaScript for Web Developers” , au servit [92] drept început al proiectului Informatică în JavaScript [~ 4] .
JavaScript | Versiunea JScript corespunzătoare | Schimbări semnificative |
---|---|---|
1.0 ( Netscape 2.0, martie 1996) | 1.0 (versiunile timpurii ale IE 3.0, august 1996) | Versiunea originală a limbajului JavaScript. |
1.1 (Netscape 3.0, august 1996) | 2.0 (versiunile ulterioare ale IE 3.0, ianuarie 1997) | În această versiune, obiectul a fost implementat Arrayși cele mai grave erori au fost remediate. |
1.2 (Netscape 4.0, iunie 1997) | Comutare implementată switch, expresii regulate. Practic adus în conformitate cu prima ediție a specificației ECMA-262. | |
1.3 (Netscape 4.5, octombrie 1998) | 3.0 (IE 4.0, octombrie 1997) | Compatibil cu prima ediție a ECMA-262. |
1.4 (doar Netscape Server) | 4.0 ( Visual Studio 6, fără versiune IE) | Se aplică numai produselor server Netscape. |
5.0 (IE 5.0, martie 1999) | ||
5.1 (IE 5.01) | ||
1.5 (Netscape 6.0, noiembrie 2000; și versiuni ulterioare ale Netscape și Mozilla ) |
5.5 (IE 5.5, iulie 2000) | Revizia 3 (decembrie 1999). Compatibil cu a treia ediție a specificației ECMA-262. |
5.6 (IE 6.0, octombrie 2001) | ||
1.6 ( Gecko 1.8, Firefox 1.5, noiembrie 2005) | Revizia 3 cu unele îmbunătățiri compatibile: E4X , completări la Array(de ex. Array.prototype.forEach), simplificări pentru Arrayși String[93] | |
1.7 (Gecko 1.8.1, Firefox 2.0, toamna 2006), extensia JavaScript 1.6 | Revizia 3, adăugând toate îmbunătățirile de la JavaScript 1.6, generatoare și liste de înțelegere din Python , blocuri folosind și destructurarea atribuirii ( ) [ 94] . [a*a for (a in iter)]letvar [a, b] = [1, 2] | |
JScript .NET ( ASP.NET ; fără versiune IE) | (Se crede că JScript .NET a fost dezvoltat cu contribuții din partea altor membri ECMA ) | |
1.8 (Gecko 1.9, Firefox 3.0, toamna 2008), extensia JavaScript 1.7 | Notație nouă pentru funcții similare expresiilor lambda tipice , generatoare , metode noi pentru procesarea matricelor iterative reduce()și reduceRight()[95] . | |
1.8.1 (Gecko 1.9.1, Firefox 3.5) | Suport JSON nativ, metoda getPrototypeOf()y , , , Objectmetode y [96]trim()trimLeft()trimRight()String | |
2.0 | Revizia 4 (lucrări în curs [97] , titlu rezervat de ECMA, dar neutilizat pentru publicare [Specificația 9] ) | |
Revizia 5 (cunoscută anterior ca ECMAScript 3.1 [97] . Finalizată la 3 decembrie 2009 [98] [99] .) |
Pentru a oferi un nivel ridicat de abstractizare și pentru a obține un grad acceptabil de compatibilitate între browsere , bibliotecile JavaScript sunt utilizate în dezvoltarea aplicațiilor web. Sunt o colecție de obiecte și funcții reutilizabile. Bibliotecile JavaScript notabile includ React.js , Vue.js , Ember.js , Adobe Spry , AngularJS , Svelte , Dojo , , jQuery , Mootools , Prototype , Qooxdoo și Underscore .
În JavaScript, accesul la programe de depanare devine deosebit de util atunci când se dezvoltă programe mari, netriviale, din cauza diferențelor de implementare între browsere (în special în ceea ce privește Modelul obiectului documentului ). Multe browsere au un depanator încorporat.
Internet Explorer are trei programe de depanare: Microsoft Visual Studio este cel mai complet, urmat de Microsoft Script Editor (o componentă a Microsoft Office [100] ), și în sfârșit Microsoft Script Debugger gratuit, mult mai simplu decât celelalte două. Microsoft Visual Web Developer Express gratuit oferă o versiune limitată cu o funcție de depanare JavaScript în Microsoft Visual Studio. În cea de-a opta versiune a IE, împreună cu instrumente pentru dezvoltatori, a apărut un depanator încorporat.
Opera are și propriul său depanator, Opera Dragonfly [101] .
Aplicațiile web pe care le dezvoltați în Firefox pot fi depanate utilizând Instrumentele pentru dezvoltatori Firefox încorporate.
Safari include programul de depanare JavaScript WebKit Web Inspector [102] . Același depanator este disponibil și în alte browsere care utilizează WebKit : Google Chrome, Arora , Rekonq , Midori etc.
Majoritatea cadrelor de testare automatizate pentru codul JavaScript necesită să rulați testele în browser. Acest lucru se face folosind o pagină HTML care este contextul testului , care la rândul său încarcă tot ceea ce este necesar pentru a efectua testul. Primele astfel de cadre au fost JsUnit (creat în 2001), Selenium (creat în 2004) [103] . O alternativă este să rulați teste din linia de comandă. În acest caz, sunt utilizate medii non-browser, cum ar fi Rhino [104] . Unul dintre primele instrumente de acest gen este Crosscheck, care vă permite să testați codul emulând comportamentul Internet Explorer 6 și Firefox versiunile 1.0 și 1.5 [105] . Un alt exemplu de cadru de testare automată pentru codul JavaScript care nu utilizează un browser pentru a rula teste este biblioteca env.js creată de John Resig. Folosește Rhino și conține emularea mediului browser și DOM [106] .
Blue Ridge, un plugin pentru cadrul aplicației web Ruby on Rails , vă permite să testați codul JavaScript atât în interior, cât și în afara browserului. Acest lucru se realizează prin utilizarea cadrului de testare automată Screw.Unit și Rhino cu env.js [107] .
Principala problemă cu sistemele de testare care nu sunt browsere este că acestea folosesc mai degrabă emulări decât mediile reale în care este executat codul. Acest lucru duce la faptul că trecerea cu succes a testelor nu garantează că codul va funcționa corect în browser [108] [109] . Problema testării sistemelor care folosesc un browser este complexitatea lucrului cu acestea, necesitatea de a efectua acțiuni de rutină neautomatizate [110] . Pentru a rezolva acest lucru, JsTestDriver, un cadru de testare automatizat dezvoltat de Google, folosește un server care comunică cu browserele pentru a efectua testarea [111] . Selenium Remote Control, parte a cadrului de testare automată Selenium, se comportă într-un mod similar: include un server care pornește și oprește browserele și acționează ca un proxy HTTP pentru cererile către acestea [112] . În plus, Selenium conține Selenium Grid, care vă permite să testați simultan codul JavaScript pe diferite computere cu medii diferite, reducând timpul de execuție a testului [113] . Sprijinit de QUnit ( biblioteca jQuery ), UnitTestJS ( biblioteca Prototype ), JSSpec ( biblioteca MooTools ), JsUnit, Selenium și Dojo Objective Harness JavaScript, Testswarm este un suport de integrare continuă distribuită [114] .
O proprietate negativă pe care o poate avea un cadru de testare a codului JavaScript este prezența dependențelor. Acest lucru creează riscul ca codul testat care trece testele să eșueze într-un mediu care nu are aceste dependențe. De exemplu, versiunea originală a JsUnitTest, cadrul creat și folosit pentru a testa biblioteca Prototype, depindea de Prototype în sine pentru a schimba proprietățile obiectelor în sfera globală [115] . Includerea unui instrument de testare într- o bibliotecă JavaScript este o practică comună. Deci YUI Test 3 face parte din Yahoo! Biblioteca UI și poate fi utilizat în siguranță pentru a testa codul JavaScript arbitrar [116] . QUnit este un cadru de testare automat creat de dezvoltatorii jQuery [117] .
Standardizarea JavaScript a necesitat evitarea problemelor legate de mărcile comerciale, așa că standardul ECMA 262 numește limbajul ECMAScript, dintre care trei revizuiri au fost publicate de când au început lucrările la acesta în noiembrie 1996.
Objective-J este un superset strict și compact de JavaScript care se adaugă la JavaScript:
VBScript de la Microsoft , precum JavaScript, poate fi rulat pe partea clientului în paginile web. VBScript are o sintaxă derivată din Visual Basic și este acceptată numai în Internet Explorer .
JSON , sau JavaScript Object Notation, este un format de schimb de date de uz general definit ca un subset de JavaScript.
Scheme este, de asemenea, o limbă soră cu JavaScript, deoarece ambele oferă caracteristici de programare funcționale bogate: JavaScript este un limbaj dinamic, acceptă matrice flexibile, poate simula cu ușurință expresii s și are suport pentru expresii lambda [118] .
JavaScript și JavaO concepție greșită comună este că JavaScript este similar sau strâns legat de Java , nu este [32] . Ambele limbi au o sintaxă asemănătoare C, sunt orientate pe obiecte și tind să fie utilizate pe scară largă în aplicațiile web la nivelul clientului. Diferențele importante includ:
JavaScript implementează interpreții unui număr de limbaje de programare, ceea ce face posibilă utilizarea unui browser web ca timp de rulare pentru acestea. Ele pot fi folosite, de exemplu, în scopuri educaționale [119] .
HotRuby este o implementare gratuită a mașinii virtuale Ruby în JavaScript și Flash . Vă permite să executați bytecode rezultat din compilarea YARV . Implementează cea mai mare parte a gramaticii Ruby. Mecanismul de excepție și majoritatea funcțiilor și claselor încorporate nu au fost încă implementate [120] . Cu HotRuby, puteți utiliza scripturi ruby pe pagini web. Pentru a face acest lucru, codul rubin ar trebui plasat într-un bloc:
< script type = "text/ruby" > ... </ script >HotRuby îl va extrage, îl va trimite la un script de la distanță pentru compilare și apoi va afișa rezultatele pe pagina [121] . Această implementare permite accesul de la Ruby la obiectele JavaScript [122] .
Tabel de implementări ale limbajelor de programare JavaScriptLimba | Numele implementării | Autori principali | Licență |
---|---|---|---|
JavaScript | d-mr [123] | Andrei Formiga | NewBSD |
postscriptum | WPS [124] | Tom Hlavaty | ? |
Asamblator pentru MOS Technology 6502 | 6502asm [125] | Stian Soreng | GPL |
Obiectiv-J | Cappuccino [126] | Ross Boucher | LGPL |
Haskell | ycr2js [127] | Tom Shackell, Neil Mitchell, Andrew Wilkinson, Mike Dodds, Bob Davie, Dimitry Golubovsky | licență permisivă simplă |
Prolog | Prolog de jucărie Monash [128] | Lloyd Allison | ? |
ioctls [129] | Jan Grant | ? | |
pisică | Cat Interpreter [130] | Christopher Diggins | domeniu public |
Sistem | BiwaScheme [131] | Yutaka Hara | MIT |
DE BAZĂ | Destul de BAZĂ [132] | Nikko Strom | proprietate gratuită |
crin | Crin [133] | Bill Orcutt | MIT |
Mai departe | în continuare [134] | K Jacobson | ? |
PHP | phype [135] | ||
Python 3 | PyPy.js | ? | ? |
Oberon 07 | oberonjs [136] | Vlad Folts | MIT |
Unele limbaje de programare oferă suport pentru interacțiunea cu codul JavaScript.
Până în prezent, suportul JavaScript este oferit de versiuni moderne ale tuturor browserelor cele mai frecvent utilizate. Internet Explorer , Opera , Mozilla Firefox , Safari , Google Chrome au suport complet pentru a treia ediție ECMA-262. În același timp, Mozilla Firefox a încercat să implementeze suport pentru cea de-a patra ediție a specificației, iar primul browser în care a apărut suport incomplet pentru specificația 3.1 a fost Internet Explorer 8 [140] .
Greșelile făcute de dezvoltatorii de browsere populare în implementarea specificației sunt de obicei minore [141] . Începând cu noiembrie 2009, modelul de obiecte de document are un suport mai limitat [142] .
Potrivit creatorului limbajului, suportul Microsoft în Internet Explorer a unuia dintre motoarele JavaScript rapide care există și este folosit în alte browsere poate duce la apariția unor aplicații care funcționează cu grafică tridimensională , jocuri 3D scrise în JavaScript, utilizarea JavaScript în sarcini care au folosit anterior tehnologia Adobe Flash [143] .
Testarea de regresie a conformității browserului cu cea de-a treia ediție a specificației ECMA-262 poate fi efectuată [144] [145] folosind instrumentul dezvoltat de Google pentru testarea conformității cu specificația ECMAScript Sputnik , care include peste cinci mii de teste cazuri [146] și a fost numit după echipa rusă Google [146] , precum și shell-ul sputniktests-webrunner [147] scris de Yuri Zaitsev sau serviciul Google [148] . Cazurile de testare incluse în Sputnik sunt actualizate în legătură cu lansarea celei de-a cincea ediții a specificației ECMA-262, reflectând modificări față de ediția anterioară [149] .
Suita de conformitate ECMAScript 5 [150] este o suită de testare lansată de Microsoft sub licența BSD [151] pentru a verifica dacă o implementare a limbajului ECMAScript este conformă cu specificația ediției a cincea. La 12 martie 2010, în pachet existau 1236 de cazuri de testare, avea versiunea 0.2 alpha și numărul de descărcări în trei luni era de 178 [152] .
Suita de testare JavaScript de la Mozilla [153] [154] este disponibilă pentru a testa corectitudinea implementărilor JavaScript .
JavaScript permite autorilor potențiali de cod rău intenționat să-l ruleze pe orice computer din rețea, prin simpla deschidere a unei pagini web pe acesta. Acest lucru are ca rezultat două limitări fundamentale:
În plus, furnizorii de browsere introduc restricții suplimentare ca răspuns la abuzurile care au loc. Așa a apărut, în special, interdicția de a deschide o fereastră, a cărei dimensiune a unei laturi este mai mică de o sută de pixeli [155] .
Vulnerabilități între site-uriO problemă comună în ceea ce privește JavaScript este cross-site scripting sau XSS, o încălcare a regulii de restricție a domeniului. Vulnerabilitățile XSS apar în situațiile în care un atacator are capacitatea de a plasa script pe o pagină care este afișată utilizatorului. În acest caz, scriptul obține acces la site-ul cu drepturile acestui utilizator, ceea ce în unele cazuri deschide posibilitatea de a trimite informații confidențiale, efectuând tranzacții nedorite .
Vulnerabilitățile XSS apar și din cauza greșelilor făcute de dezvoltatorii de browser [157] .
Un alt tip de vulnerabilitate între site-uri este falsificarea cererilor între site-uri sau CSRF. Constă în capacitatea site-ului atacatorului de a forța browserul utilizatorului să efectueze o acțiune nedorită pe site-ul țintă (de exemplu, un transfer bancar de bani). Acest lucru este posibil dacă site-ul țintă se bazează numai pe cookie-uri HTTP sau pe cereri de autorizare. În acest caz, solicitările inițiate de codul site-ului atacatorului sunt executate în același mod ca și solicitările utilizatorului dacă acesta este autorizat pe site-ul țintă. Unul dintre mijloacele de protecție împotriva CSRF este efectuarea autentificării oricărei cereri care duce la consecințe ireversibile. Analizarea refererului HTTP poate ajuta, de asemenea .
Încredere de partea clientului greșitDezvoltatorii de aplicații client, indiferent dacă folosesc sau nu JavaScript, trebuie să știe că acestea din urmă pot fi sub controlul atacatorilor. Prin urmare, orice verificare pe partea clientului poate fi ocolită, JavaScript poate rula sau nu. Codul ofuscat poate fi inginerie inversă ; datele formularului pot fi trimise către server fără validare JavaScript ; scripturile pot fi dezactivate parțial, deci, de exemplu, nu poate fi implementată o protecție fiabilă împotriva salvării imaginilor folosind JavaScript [158] ; este extrem de imprudent să încorporați parola în JavaScript care rulează pe client, unde poate fi găsită de un atacator.
Erori în browser, pluginuri și extensiiJavaScript oferă o interfață pentru o gamă largă de capabilități ale browserului, dintre care unele pot conține erori, cum ar fi depășirile de buffer . Acest lucru vă permite să scrieți scripturi care determină executarea unui cod arbitrar pe sistemul utilizatorului.
Au fost găsite erori similare în browserele utilizate în mod obișnuit, inclusiv Mozilla Firefox [159] , Internet Explorer [160] , Safari [161] . Atunci când identifică erori potențial periculoase în browser și dețin informații despre exploit -urile implementate , producătorul și experții în securitate recomandă dezactivarea JavaScript înainte de lansarea patch- ului [162] [163] .
Plugin -urile precum playerele , Macromedia Flash și o serie de componente ActiveX disponibile implicit în Internet Explorer pot conține, de asemenea, erori exploatate cu JavaScript, așa cum sa întâmplat înainte [164] [165] .
Extensiile Mozilla Firefox nu sunt izolate unele de altele: o extensie poate repara alta, care poate fi exploatată de atacatori. La SecurityByte & Owasp AppSec Asia 2009 , Roberto Suggi Liverani și Nick Freeman au demonstrat trei exploit -uri în extensiile populare Firefox, descărcate de peste 30 de milioane de ori de pe site [166] .
Erori de implementare SandboxBrowserele pot rula JavaScript în afara sandbox-ului cu privilegiile necesare pentru a crea și șterge fișiere, de exemplu. Cu toate acestea, astfel de privilegii nu ar trebui acordate codului de pe web.
Privilegiile necorespunzătoare pentru JavaScript de pe web au fost cauza unor vulnerabilități atât în Internet Explorer [167] , cât și în Mozilla Firefox [168] .
Microsoft Windows permite fișierelor JavaScript să ruleze ca programele normale, fără a fi închise cu nisip. Acest lucru face posibilă crearea de troieni [169] .
JavaScript | |
---|---|
Idei | |
Compilatoare | |
Motoare | |
Biblioteci și cadre | |
Editori | |
Instrumente |
|
Tehnologii conexe | |
oameni | |
Categorie |
ECMAScript | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Dialectele | |||||||||||||
Motoare ( comparație ) | |||||||||||||
Cadre , biblioteci |
| ||||||||||||
oameni | |||||||||||||
Alte |
|
Limbaje de programare | |
---|---|
|
Web și site-uri web | |
---|---|
la nivel global | |
La nivel local | |
Tipuri de site-uri și servicii |
|
Creare si intretinere | |
Tipuri de machete, pagini, site-uri | |
Tehnic | |
Marketing | |
Societate și cultură |