Materialul, a cărui traducere o publicăm astăzi, este dedicat elementelor de bază ale JavaScript și este destinat programatorilor începători. Poate fi, de asemenea, considerată o mică carte de referință despre constructele de bază JS. Aici vom vorbi, în special, despre sistemul de tip de date, variabile, matrice, funcții, prototipuri de obiecte și câteva alte caracteristici ale limbajului.
Tipuri de date primitive JavaScript are următoarele tipuri de date primitive: număr, boolean, șir, nedefinit, nul. Trebuie remarcat imediat că atunci când lucrăm cu tipuri de date primitive, de exemplu, literali șir, putem accesa metodele și proprietățile acestora chiar și fără a efectua o conversie explicită. Ideea aici este că atunci când se încearcă efectuarea unor astfel de operațiuni, literalele sunt echipate automat cu învelișul de obiect corespunzător.▍Numerele Există un singur tip de număr în JavaScript - numere cu virgulă mobilă cu precizie dublă. Aceasta duce la faptul că rezultatele calculării unor expresii sunt incorecte din punct de vedere aritmetic. Poate știți deja că în JS valoarea expresiei 0,1 + 0,2 nu este egală cu 0,3. În același timp, atunci când se lucrează cu numere întregi, astfel de probleme nu sunt observate, adică 1 + 2 === 3.JavaScript are un obiect Number, care este un înveliș de obiect pentru valori numerice. Obiectele de tip Number pot fi create fie folosind o comandă precum var a = new Number(10) , fie vă puteți baza pe comportamentul automat al sistemului descris mai sus. Acest lucru permite în mod special apelarea metodelor stocate în Number.prototype atunci când sunt aplicate literalelor numerice:
(123).toString(); //"123" (1.23).toFixed(1); //"1.2"
Există funcții globale concepute pentru a converti valorile altor tipuri într-un tip numeric. Acestea sunt parseInt() , parseFloat() și constructul Number(), care în acest caz acționează ca o funcție obișnuită care realizează conversia tipului:
ParseInt("1") //1 parseInt("text") //NaN parseFloat("1.234") //1.234 Number("1") //1 Number("1.234") //1.234
Dacă o operațiune cu numere are ca rezultat ceva care nu este un număr (în timpul unor calcule sau când încercați să convertiți ceva într-un număr), JavaScript nu va arunca o eroare, ci va reprezenta rezultatul unei astfel de operații ca o valoare NaN ( Nu-un-număr, nu-un număr). Pentru a verifica dacă o valoare este NaN, puteți utiliza funcția isNaN().
Operațiile aritmetice JS funcționează într-un mod foarte familiar, dar trebuie să acordați atenție faptului că operatorul + poate efectua atât adăugarea numerelor, cât și concatenarea șirurilor.
1 + 1 //2 "1" + "1" //"11" 1 + "1" //"11"
▍Șiruri Șirurile de caractere în JavaScript sunt secvențe de caractere Unicode. Literele șiruri sunt create prin includerea textului care trebuie cuprins între ghilimele duble ("") sau ghilimele simple (""). După cum am menționat deja, atunci când lucrăm cu literale șir, ne putem baza pe învelișul de obiect corespunzător, al cărui prototip are multe metode utile, inclusiv substring(), indexOf(), concat()."text".substring(1,3) //ex "text".indexOf("x") //2 "text".concat(" end") //text final
Șirurile, ca și alte valori primitive, sunt imuabile. De exemplu, metoda concat() nu modifică un șir existent, ci creează unul nou.
Let text = ""; if(text) ( console.log ("Acesta este adevărat"); ) else ( console.log ("Acesta este fals"); )
Obiecte Obiectele sunt structuri dinamice formate din perechi cheie-valoare. Valorile pot fi tipuri de date primitive, obiecte sau funcții.Obiectele sunt cel mai ușor create folosind sintaxa literală a obiectului:
Let obj = ( mesaj: „Un mesaj”, doSomething: function() () )
Proprietățile obiectului pot fi citite, adăugate, editate și șterse în orice moment. Iată cum se face:
Fie obj = (); // crearea unui obiect gol obj.message = "Un mesaj"; // adăugarea unei noi proprietăți obj.message = "Un mesaj nou"; // editarea proprietății delete object.message; // ștergerea unei proprietăți
Obiectele din limbaj sunt implementate ca tabele hash. Un tabel hash simplu poate fi creat folosind comanda Object.create(null):
Let french = Object.create(null); french["yes"] = "oui"; french["no"] = "nu"; franceză["da"];//"oui"
Dacă trebuie să faceți un obiect imuabil, puteți utiliza comanda Object.freeze().
Pentru a itera prin toate proprietățile unui obiect, puteți utiliza comanda Object.keys():
Funcția logProperty(nume)( console.log(nume); //nume proprietate console.log(obj); //valoare proprietate ) Object.keys(obj).forEach(logProperty);
▍Compararea valorilor tipurilor și obiectelor primitive Când lucrați practic cu valori primitive, puteți, după cum s-a spus deja, să le percepeți ca obiecte care au proprietăți și metode, deși nu sunt obiecte. Valorile primitive sunt imuabile, iar structura internă a obiectelor se poate modifica Variabile În JavaScript, variabilele pot fi declarate folosind cuvintele cheie var, let și const.Când folosiți cuvântul cheie var, puteți declara o variabilă și, dacă este necesar, o inițializați cu o anumită valoare. Dacă o variabilă nu este inițializată, valoarea ei este nedefinită. Variabilele declarate folosind cuvântul cheie var au sferă funcțională.
Cuvântul cheie let este foarte asemănător cu var , diferența fiind că variabilele declarate cu cuvântul cheie let au domeniul de aplicare al blocului.
Variabilele declarate folosind cuvântul cheie const au, de asemenea, domeniul de aplicare al blocului, care, având în vedere că valorile unor astfel de variabile nu pot fi modificate, s-ar numi mai corect „constante”. Cuvântul cheie const, care îngheață valoarea unei variabile declarate folosindu-l, poate fi comparat cu metoda Object.freeze(), care îngheață obiectele.
Dacă o variabilă este declarată în afara unei funcții, domeniul ei este global.
Matrice Matricele în JavaScript sunt implementate folosind obiecte. Ca urmare, atunci când vorbim despre matrice, vorbim de fapt despre obiecte asemănătoare matricei. Puteți lucra cu elemente de matrice folosind indecșii acestora. Indicii numerici sunt convertiți în șiruri de caractere și utilizați ca nume pentru a accesa valorile elementelor de matrice. De exemplu, un construct precum arr este similar cu un construct precum arr["1"] și ambele vor da acces la aceeași valoare: arr === arr["1"] . Pe baza celor de mai sus, o matrice simplă declarată cu let arr = ["A", "B", "C"] este reprezentată ca un obiect cam așa:("0": "A", "1": "B", "2": "C")
Eliminarea elementelor dintr-o matrice folosind comanda de ștergere lasă găuri în ea. Pentru a evita această problemă, puteți folosi comanda splice(), dar este lentă deoarece, după eliminarea unui element, mută elementele rămase ale matricei, de fapt, mutându-le la începutul matricei, la stânga.
Fie arr = ["A", "B", "C"]; șterge arr; console.log(arr); // ["A", gol, "C"] console.log(arr.length); // 3
Metodele matrice facilitează implementarea structurilor de date, cum ar fi stivele și cozile:
// stack let stack = ; stack.push(1); // stack.push(2); // lăsați să dureze = stack.pop(); // console.log(ultimul); // 2 // coada let coada = ; coada.push(1); // coada.push(2); // let first = queue.shift();// console.log(first); // 1
Funcții Funcțiile din JavaScript sunt obiecte. Funcțiile pot fi atribuite variabilelor, stocate în obiecte sau matrice, transmise ca argumente altor funcții și returnate de la alte funcții.Există trei moduri de a declara funcții:
Funcția doSomething()()
▍Expresii de funcție Când utilizați expresii de funcție, luați în considerare următoarele:Lasă să facă ceva = function()()
▍Funcții săgeți Funcțiile săgeată pot fi considerate în esență „zahăr sintactic” pentru crearea expresiilor de funcție anonime. Trebuie remarcat faptul că astfel de funcții nu au propriile entități this și argumente. Declarația unei funcții săgeată arată astfel:Lasă să facă ceva = () = > ();
▍Moduri de apelare a funcțiilor Funcțiile pot fi apelate în diferite moduri Apelarea funcției normale doSomething(arguments) Apelarea unei funcții ca metodă a theObject.doSomething(arguments) theObject["doSomething"](arguments) Apelarea unei funcții ca un constructor doSomething. (argumente) Apelarea unei funcții folosind metoda apply() doSomething.apply(theObject, ) doSomething.call(theObject, arguments) Apelarea unei funcții folosind metoda bind() let doSomethingWithObject = doSomething.bind(theObject); faceSomethingWithObject();Funcțiile au doi pseudo-parametri: this și arguments.
▍Cuvântul cheie this Cuvântul cheie this reprezintă contextul unei funcții. Valoarea către care indică depinde de modul în care a fost apelată funcția. Iată valorile pe care le ia acest cuvânt cheie, în funcție de cum este numită funcția (ele, cu exemple de cod, constructele din care sunt folosite aici, sunt descrise mai sus):Funcția reduceToSum(total, valoare)( returnează total + valoare; ) funcția sum())( let args = Array.prototype.slice.call(arguments); return args.reduce(reduceToSum, 0); ) sum(1,2 , 3);
O alternativă la cuvântul cheie arguments este o nouă sintaxă pentru parametrii rămași. În exemplul următor, args este o matrice care conține tot ce a trecut funcției când a fost apelată.
Funcția sum(...args)( return args.reduce(reduceToSum, 0); )
▍Instrucțiune de returnare O funcție care nu conține o instrucțiune de returnare va returna nedefinit. Când utilizați cuvântul cheie return, acordați atenție modului în care funcționează mecanismul de inserare automată a punctului și virgulă. De exemplu, următoarea funcție nu va returna un obiect gol, ci o valoare nedefinită:Funcția getObject() ( return ( ) ) getObject()
Pentru a evita această problemă, plasați acolada de deschidere pe aceeași linie cu instrucțiunea return:
Funcția getObject() ( return ( ) )
Tastare dinamică JavaScript este un limbaj cu tastare dinamică. Aceasta înseamnă că valorile concrete au tipuri, dar variabilele nu. În timpul execuției programului, valorile de diferite tipuri pot fi scrise în aceeași variabilă. Iată un exemplu de funcție care funcționează cu valori de diferite tipuri:Funcția log(valoare)( console.log(valoare); ) log(1); log("text"); log((mesaj: „text”);
Pentru a afla tipul de date stocate într-o variabilă, puteți utiliza operatorul typeof():
Fie n = 1; tip de(n); //număr let s = "text"; tip(e); //șir let fn = function() (); typeof(fn); //funcţie
Model de execuție cu un singur thread Timpul de execuție JavaScript este cu un singur thread. Acest lucru, în special, se exprimă în imposibilitatea execuției simultane a două funcții (dacă nu se ține cont de posibilitatea executării asincrone a codului, pe care nu o atingem aici). Mediul de rulare are ceva numit Coadă de evenimente care stochează o listă de joburi care trebuie procesate. Ca urmare, schema de execuție JS cu un singur thread nu are problema blocajelor de resurse, deci nu este nevoie de un mecanism de blocare. Cu toate acestea, codul care intră în coada de evenimente trebuie să se execute rapid. Dacă supraîncărcați firul principal într-o aplicație de browser cu multă muncă, pagina aplicației nu va răspunde la introducerea utilizatorului și browserul vă va solicita să închideți această pagină. Gestionarea excepțiilor JavaScript are un mecanism pentru gestionarea excepțiilor. Funcționează după un principiu destul de obișnuit pentru astfel de mecanisme: codul care poate provoca o eroare este formatat folosind constructul try/catch. Codul în sine este în blocul try, erorile sunt tratate în blocul catch.Este interesant de observat că uneori JavaScript, atunci când apar situații de urgență, nu produce mesaje de eroare. Acest lucru se datorează faptului că JS nu a aruncat erori până la adoptarea standardului ECMAScript 3.
De exemplu, în următorul fragment de cod, o încercare de a modifica un obiect înghețat va eșua, dar nu se va face nicio excepție.
Let obj = Object.freeze(); obj.message = "text";
Unele dintre erorile JS „silențioase” apar în modul strict, le puteți activa folosind constructul „utilizați strict”; .
Let service = ( doSomething: function() () ) let specializedService = Object.create(service); console.log(specializedService.__proto__ === service); //adevărat
Aici, comanda Object.create() a fost folosită pentru a crea un obiect specializedService al cărui prototip urma să fie un obiect de serviciu. Ca rezultat, se dovedește că metoda doSomething() poate fi apelată prin accesarea unui obiect specializedService. În plus, aceasta înseamnă că proprietatea __proto__ a obiectului specializedService indică către obiectul serviciu.
Să creăm acum un obiect similar folosind cuvântul cheie class:
Class Service ( doSomething() ) clasa SpecializedService extinde Service ( ) let specializedService = new SpecializedService(); console.log(specializedService.__proto__ === SpecializedService.prototype);
Metodele declarate în clasa Service vor fi adăugate obiectului Service.prototype. Instanțele clasei Service vor avea același prototip (Service.prototype). Toate instanțele vor delega apelurile de metodă către obiectul Service.prototype. Ca urmare, se dovedește că metodele sunt declarate o singură dată, în Service.prototype , după care sunt „moștenite” de toate instanțele clasei.
O închidere este o funcție internă care are acces la variabilele declarate în interiorul funcției părinte, chiar și după ce funcția părinte a fost executată.
O funcție de ordin superior este o funcție care este capabilă să ia alte funcții ca argumente, să returneze funcții sau să facă ambele.
Programarea funcțională în JS este acoperită în multe publicații. Dacă sunteți interesat, iată câteva materiale pe această temă dedicată
Datorită cererii populare, lansăm o serie de lecții JavaScript. Dacă sunteți hotărât să stăpâniți JS, atunci trebuie să aveți cunoștințe de bază despre HTML și CSS, deoarece aceasta este fundația, fără de care este greu de înțeles ce se va discuta.
La noi, voi încerca să explic într-un limbaj ușor de înțeles, să arăt cu exemple din viața reală, pentru că totul se învață prin comparație.
Ce este JavaScript sau cum să înțelegeți ce scop este necesar pentru dezvoltarea web!Trăim într-o lume în care totul este tangibil, ne dăm seama de ideile care ne vin în minte. Construim case, mașini și ne deplasăm folosind diverse tehnici. Adică, ceea ce putem face în lumea reală poate fi imaginat în comparație cu HTML, unde acționează ca un material de construcție, fundația pe care se sprijină totul și, cu ajutorul CSS, proiectăm această lume, o facem colorată, felul în care am vrut am dori să-l vedem singur.
Probabil vă întrebați dacă HTML și CSS sunt ceea ce suntem înconjurați, deci ce este JavaScript? Unde apare în lumea noastră?
Cred că ar fi mai ușor de explicat folosind exemplul filmului Gary Potter, cred că mulți dintre voi l-ați vizionat și veți înțelege ce se va discuta. Conform scenariului filmului, știm că Gary avea super puteri, era un vrăjitor și o baghetă magică l-a ajutat în acest sens. Bagheta magică a fost cea care i-a oferit oportunitatea de a crea magie, atât de sus cât avea cunoștințele necesare pentru a o face unică.
JavaScript este o baghetă magică pe care o are fiecare dezvoltator web, dar ce magie poți crea cu ea depinde doar de cunoștințele pe care le are dezvoltatorul. Cei care au stăpânit această limbă sunt vrăjitori și fac cu adevărat minuni.
JavaScript nu este complet fără componentele sale HTML și CSS. Mulți programatori menționează trei limbi care formează „straturile” unei pagini web: HTML, CSS și JavaScript.
HTML este primul limbaj de marcare hipertext - oferă straturi structurale, organizând expresiv conținutul paginii, cum ar fi text, imagini și alte elemente.
Al doilea, CSS (Cascading Style Sheets), creează un design frumos, aspectul conținutului HTML.
Iar al treilea - JavaScript - adaugă straturi comportamentale, înviorând pagina web, făcând-o interactivă, adică creând elemente pentru interacțiunea cu vizitatorii.
În concluzie, pentru a stăpâni JavaScript, trebuie să aveți o bună înțelegere atât a HTML, cât și a CSS.
Programarea poate părea o magie incredibilă, dincolo de îndemâna simplilor muritori. Cu toate acestea, majoritatea conceptelor sale nu sunt greu de înțeles. JavaScript este destul de prietenos pentru începători, dar este totuși mai complex decât HTML sau CSS, așa că prin această serie de lecții, vă vom învăța concepte fundamentale de programare pe care le puteți aplica la scripting în JavaScript.
Vă veți familiariza cu noile simboluri ( ), , ; , (), !, învață desemnarea cuvintelor noi (var, null, else if), vom analiza regulile de punctuație și sintaxa limbajului în sine, și toate acestea pentru a-ți crea magia.
Materialul a fost pregătit de Denis Gorelov, scrieți-vă comentariile și asigurați-vă că împărtășiți acest material prietenilor voștri.
Există multe subtilități diferite în crearea paginilor web. Dar există și trei piloni. Acestea sunt HTML, CSS și JavaScript.
Vă recomand să vă organizați autoeducația astfel: de îndată ce stăpânești sintaxa HTML și înveți cum să faci pagini primitive cu text, imagini și tabele, începe imediat să înveți CSS. Odată ce înțelegeți cum să lucrați cu CSS, începeți să stăpâniți JavaScript, extinzându-vă simultan „vocabularul” în toate cele trei limbi. Cred că în șase luni vei putea construi un site web foarte frumos și funcțional.
Multă vreme nu am știut cum să abordez JavaScript. Am dat peste manuale care fie erau prea abstracte - teorie, teorie, și nu era clar cum să le aplici în practică, fie, dimpotrivă, prea specifice: iată un set de rețete gata făcute, ia-l și folosește-l, dar cum se dovedește totul nu este treaba ta.
Am dat cumva de un manual de Vadim Dunaev. Mulți oameni, știu, critică acest manual. În plus, am descărcat un PDF scanat dezgustător, unde în loc de „()” ar putea fi, de exemplu, „Q”, iar literele latine din coduri au fost înlocuite (pe alocuri!) cu altele similare rusești, motiv pentru care aceste coduri nu funcționează. În general, a trebuit să puf. Și, să fiu sinceră, dacă nu aș fi citit nimic despre JavaScript înainte, nu aș fi înțeles aceste erori și m-aș fi înscris în rândurile escalatorilor. Dar eram șomer pe vremea aceea, am avut timp să intru în asta și mi-a plăcut manualul. Dar este foarte detaliat și conceput pentru persoanele care au intrat deja în contact cu programarea.
Nota 2012
Acum, după câțiva ani, mai privesc acest manual fără același entuziasm. Este depășit, „cromat” pentru IE și destul de superficial; Există, de asemenea, erori reale și cod neglijent, iar unele lucruri utile nu sunt găsite. Dar, în comparație cu acele „ghiduri proaste-tâmpite” pe care motoarele de căutare le-au produs din abundență, acesta a fost ceva.
Deci, vreau să încerc să omor două păsări dintr-o singură piatră. Scrie ceva de înțeles pentru orice ceainic și în același timp constructiv și educativ. Pentru ca acest ceainic, pe baza sfatului meu, să poată scrie un scenariu simplu, dar complet original.
Inserarea într-un document HTMLProbabil ați văzut următoarele etichete în codurile HTML:
Acest abracadabra dintre etichete este scenariul.
Eticheta în sine aparține limbajului HTML și poate avea următoarele atribute:
Acest atribut este opțional. Ar trebui să fie folosit fie pentru a specifica versiunea limbii (javascript1.1, javascript1.2 etc.), fie dacă utilizați o altă limbă (de exemplu,