JavaScript

De la Wikipedia, enciclopedia liberă
Nu confundați cu Java (limbaj de programare).
JavaScript

Unofficial JavaScript logo
JavaScript
Extensii fișierejs[1]  Modificați la Wikidata
ParadigmăMulti-paradigmă: scripting, obiect-orientat (prototype-based), imperative, functional[2]
Apărut în1995; acum 29 ani (1995)
Proiectat deBrendan Eich
DezvoltatorNetscape Communications Corporation, Mozilla Foundation
Ultima versiune1.8.5[3]/ 22 martie 2011; acum 13 ani, 1 lună și 20 zile (2011-03-22)
Tiparedynamic, duck
Implementări majoreKJS, Rhino, SpiderMonkey, V8, Carakan, Chakra
Influențat deScheme, Self, Java, C
InfluențeActionScript, CoffeeScript, Dart, JScript .NET, Objective-J, QML, TypeScript, Node.js, LiveScript
Tip MIMEtext/javascript[1][4]
application/x-ecmascript
application/x-javascript[5]
text/javascript1.0
text/javascript1.1
text/javascript1.2
text/javascript1.4
text/javascript1.3
text/javascript1.5
text/livescript
text/x-ecmascript
text/x-javascript  Modificați la Wikidata
Wikibooks logo JavaScript la Wikibooks
JavaScript
Extensie de fișier.js
Tip MIMEapplication/javascript
text/javascript (obsolete)[6]
UTIcom.netscape.javascript-source[7]
Tipul formatuluiLimbaj de scripting

JavaScript (JS) este un limbaj de programare orientat obiect bazat pe conceptul prototipurilor.[8] Este folosit mai ales pentru introducerea unor funcționalități în paginile web, codul JavaScript din aceste pagini fiind rulat de către browser. Limbajul este binecunoscut pentru folosirea sa în construirea siteurilor web, dar este folosit și pentru accesul la obiecte încapsulate (embedded objects) în alte aplicații. A fost dezvoltat inițial de către Brendan Eich de la Netscape Communications Corporation sub numele de Mocha, apoi LiveScript, și denumit în final JavaScript.

În ciuda numelui și a unor similarități în sintaxă, între JavaScript și limbajul Java nu există nicio legătură. Ca și Java, JavaScript are o sintaxă apropiată de cea a limbajului C, dar are mai multe în comun cu limbajul Self decât cu Java.

Până la începutul lui 2005, ultima versiune existentă a fost JavaScript 1.5, care corespunde cu Ediția a 3-a a ECMA-262, ECMAScript, cu alte cuvinte, o ediție standardizată de JavaScript. Versiunile de Mozilla începând cu 1.8 Beta 1 au avut suport pentru E4X, care este o extensie a limbajului care are de a face cu XML, definit în standardul ECMA-357. Versiunea curentă de Mozilla, 1.8.1 (pe care sunt construite Firefox și Thunderbird versiunile 2.0) suportă JavaScript versiunea 1.7.

Java, JavaScript și JScript[modificare | modificare sursă]

Schimbarea numelui din LiveScript în JavaScript s-a făcut cam în același timp în care Netscape încorpora suport pentru tehnologia Java în browserul web Netscape Navigator.

Microsoft a implementat limbajul JavaScript sub numele de JScript, cu o serie de modificări și extensii față de implementarea Netscape. Pe platforma Windows, JScript este unul din limbajele executabile de către Windows Script și, deci, poate fi folosit pentru scriptarea aplicațiilor ce suportă Windows Script, de exemplu Internet Explorer, sau chiar sistemul de operare Windows.

Asociația ECMA a standardizat limbajul JavaScript/JScript sub numele ECMAScript (standardul ECMA-262)

Utilizare[modificare | modificare sursă]

Cea mai des întâlnită utilizare a JavaScript este în scriptarea paginilor web. Programatorii web pot îngloba în paginile HTML script-uri pentru diverse activități cum ar fi verificarea datelor introduse de utilizatori sau crearea de meniuri și alte efecte animate.

Browserele rețin în memorie o reprezentare a unei pagini web sub forma unui arbore de obiecte și pun la dispoziție aceste obiecte script-urilor JavaScript, care le pot citi și manipula. Arborele de obiecte poartă numele de Document Object Model sau DOM. Există un standard W3C pentru DOM-ul pe care trebuie să îl pună la dispoziție un browser, ceea ce oferă premiza scrierii de script-uri portabile, care să funcționeze pe toate browserele. În practică, însă, standardul W3C pentru DOM este incomplet implementat. Deși tendința browserelor este de a se alinia standardului W3C, unele din acestea încă prezintă incompatibilități majore, cum este cazul Internet Explorer.

O tehnică de construire a paginilor web tot mai întâlnită în ultimul timp este AJAX, abreviere de la „Asynchronous JavaScript and XML”. Această tehnică constă în executarea de cereri HTTP în fundal, fără a reîncărca toată pagina web, și actualizarea numai anumitor porțiuni ale paginii prin manipularea DOM-ului paginii. Tehnica AJAX permite construirea unor interfețe web cu timp de răspuns mic, întrucît operația (costisitoare ca timp) de încărcare a unei pagini HTML complete este în mare parte eliminată. JavaScript este cu adevărat un limbaj dinamic. Rar este necesar să utilizați operatorul de evaluare pentru lucruri de genul acesta, pentru că, practic, puteți scrie orice doriți, dacă sintaxa este corectă și dacă ceea ce ați scris nu există, veți primi o eroare de execuție.[9]

Elementele de bază ale limbajului [10] [11] [12][modificare | modificare sursă]

Comentarii[modificare | modificare sursă]

Sintaxa unui comentariu este aceeași ca și în C++ și multe alte limbaje:

// Scurt, o linie de comentariu
/* Acesta este un comentariu
   pe două linii. */
/* Comentarii /* combinate */ Eroare de sintaxă */

Tipuri de date[modificare | modificare sursă]

Nedefinit[modificare | modificare sursă]

Valoarea de "undefined" este atribuită la toate variabilele neinițializate, și, de asemenea, într-un context boolean, valoarea undefined este considerat o valoare de fals.

var test ; // variabila declarata, dar nu este definita

Null[modificare | modificare sursă]

Spre deosebire de nedefinit, nul este de multe ori setat pentru a indica faptul că ceva a fost declarat, dar a fost definit pentru a fi gol. Într-un context boolean, valoarea nulă este considerată o valoare de fals în JavaScript.

String[modificare | modificare sursă]

Un string (sau șir) în Javascript este o secvență de caractere cuprinsă între ghilimele duble sau single.

var greeting = "Hello, world!" ; 
var anotherGreeting = 'Greetings, people of Earth.' ; 

Puteți accesa caractere individuale dintr-un șir utilizând charAt metoda (furnizate de String.prototype ). Aceasta este metoda preferată atunci când accesarea de caractere individuale din cadrul unui șir, pentru că, de asemenea, funcționează non-moderne browsere:

var h = greeting. charAt ( 0 ) ; 

În browsere moderne, caractere individuale din cadrul unui șir pot fi accesate (ca siruri de caractere, cu doar un singur caracter), prin notația matrice ca:

var h = greeting [ 0 ];

Cu toate acestea, siruri de caractere JavaScript sunt imuabile :

greeting [ 0 ] = "H" ; // Nu are efect.

Aplicarea operatorul de egalitate ("==="), pentru două șiruri returneaza true daca siruri de caractere au același conținut, ceea ce înseamnă: de aceeași lungime și aceleași cazuri (pentru alfabete). Astfel:

var x = "world";
var compare1 = ( "Hello, " + x === "Hello, world" ) ; // Acum, compare1 conține adevărat.
var compare2 = ( "Hello, " + x === "hello, world" ) ; // Acum, compare2 conține ...
                                                  // ... fals, deoarece ...
                                                  // ... primele caractere ...
                                                  // ... de ambii operanzi ...
                                                  // ... nu sunt de același tip.

Nu puteți utiliza citate de același tip în interiorul citate cu excepția cazului în care folosiți secvențe escape.

var x = '"Hello, world!" he said.' // bine..
var x = "" Hello , world ! " he said." // Nu e bine..
var x = " \" Hello, world! \" he said." // care acționează prin înlocuirea "cu \"!

Este posibil de a crea un șir utilizând String constructor:

var greeting = new String ( "Hello, world!" ) ; 

Aceste obiecte au o metodă valueOf care întoarce șirul de primitiv înfășurat în ele:

var s = new String ( "Hello !" ) ; 
typeof s ; // este 'object'. 
typeof s. valueOf () ; // este "string".

Egalitatea de valori între două String obiecte nu se comportă ca și primitive de coarde:

var s1 = new String ( "Hello !" ) ; var s1 = new String ("Salut!");
var s2 = new String ( "Hello !" ) ; var s2 = new String ("Salut!");
s1 === s2 ; // este falsă, deoarece acestea sunt două obiecte distincte.
s1. valueOf () === s2. valueOf () ; // este adevărat.

Boolean[modificare | modificare sursă]

JavaScript oferă un tip de date Boolean cu valorile true și false. Operatorul returnează șirul "boolean" pentru aceste tipuri de primitive.

Atunci când este utilizat într-un context logic, 0 , -0 , null , NaN , undefined , iar șir vid ( "" ) evaluează în false din cauza constrângerii automate.

Când conversia de tip este necesară, JavaScript convertește String, Number, Boolean, sau operanzilor obiect, după cum urmează: [5]

  • Șir de caractere este convertit la o valoare număr. JavaScript încearcă să transforme literal șir de caractere numeric, la o valoare tip de număr. În primul rând, o valoare de matematică este derivat din literal șir de caractere numeric. Apoi, această valoare este rotunjită la cea mai apropiată valoare tip de număr.
  • Dacă unul dintre operanzi este un Boolean, operand Boolean este convertit la 1 dacă este true sau la 0, dacă este false .
  • Dacă un obiect este comparat cu un număr sau un șir de caractere, JavaScript încearcă să se întoarcă valoarea implicită pentru obiect. Un obiect este convertit la un șir de caractere sau o valoare numerică, folosind .valueOf() sau .toString() metode de obiect. Dacă acest lucru nu reușește, o eroare de execuție este generată.

Unii experți folosesc termenii "true" și "false" pentru a descrie modul în care valorile de diferite tipuri, se comportă atunci când a evaluat într-un context logic, în special în ceea ce privește cazurile de margine. Operatorii logici binare a returnat o valoare booleană în primele versiuni de JavaScript, dar acum se vor întoarce unul dintre operanzi loc.

Operandul stâng este returnat în cazul în care acesta poate fi evaluat ca: false , în cazul de asociere ( a && b ) , sau true , în cazul de disjuncției ( a || b ) , în caz contrar dreptul de-operand este returnat.

O expresie poate fi în mod explicit exprimate la un primitiv de booleană: dublarea logic operatorul negație ( !! ) , folosind Boolean() funcția, sau folosind operatorul condițional ( c ? t : f ) .

Array[modificare | modificare sursă]

Un „Array” (sau „tablou”, „matrice”) este un obiect JavaScript proiectat pentru a stoca valori de date indexate de chei întregi.

Matricea, spre deosebire de tipul de obiect de bază, se patentează cu metode si proprietati pentru a ajuta programatorul în sarcini de rutină (de exemplu, join , slice , și push ).

var myArray = [ ] ; // Creează o variabilă nouă array cu numele myArray 
myArray. push ( "hello world" ) ; // Completează valoarea de index 0 cu valoarea "hello world"

Matricile au o proprietate length (sau “lungime”) care este întotdeauna mai mare decât indicele de cel mai mare index utilizat în matrice.

Elemente de matrice pot fi accesate folosind normale de acces obiect de proprietate notație:

myArray [ 1 ] ; // elementul 2 în myArray
myArray [ "1" ] // Cele două de mai sus sunt echivalente. 

Declarația a unui tablou poate folosi fie un tablou literal sau Array constructorului:

myArray = [ 0 , 1 , , , 4 , 5 ] ; // tablou cu lungime de 6 si 2 elemente nedefinite
myArray = new Array ( 0 , 1 , 2 , 3 , 4 , 5 ) ; // tablou cu lungime de 6 si 6 elemente
myArray = new Array ( 365 ) ; // un array gol cu lungimea de 365

Se mai poate utiliza declarația obiect literal:

câine = {culoare: "maro", dimensiune: "mare"};
câine [ "culoare" ] ; // rezultatul este "maro"
câine. culoare ; // de asemenea, rezultate în "maro"

Se pot utiliza literali declarație obiect și matrice pentru a crea rapid matrice care sunt asociative, multidimensionale, sau ambele. (Tehnic, JavaScript nu acceptă tablouri multidimensionale, dar le poate imita cu tablouri-de-matrice.)

pisici = [{culoare: "maro", dimensiune: "mari"}, {culoare: "negru", dimensiune: "mici"}];
pisici [0] ["dimensiune"]; // rezultatul este "mare"
 
câini = {rover: {culoare: "maro", dimensiune: "mari"}, spot : {culoare: "negru", dimensiune: "mici"}};
câini ["spot"] ["dimensiune"]; // rezultatul este "mici"
câini.rover.culoare ; // results in "brown" .. caini Rover de culoare; // rezultatele în "maro"

Date calendaristice[modificare | modificare sursă]

Un obiect Data stochează numărul de milisecunde începând cu data de 1970-01-01 00:00:00 UT.

new Date () // creează o nouă instanță reprezentând Data curentă data / ora.
new Date ( 2010 , 2 , 1 ) // creează o nouă instanță, reprezentând data de 2010-Mar-01 00:00:00
new Date ( 2010 , 2 , 1 , 14 , 25 , 30 ) // creează o nouă instanță, reprezentând data de 2010-Mar-01 14:25:30
new Date ( "2010-3-1 14:25:30" ) // creează o nouă instanță Data dintr-un șir.

Metode de a extrage câmpurile sunt furnizate, precum și ca un instrument util toString :

var d = new Date ( 2010 , 2 , 1 , 14 , 25 , 30 ) ; // 2010-Mar-01 14:25:30
 
// Afișează '2010-3-1 14:25:30 ":
alert ( d. getFullYear () + '-' + ( d. getMonth () + 1 ) + '-' + d. getDate () + ' '       + d. getHours () + ':' + d. getMinutes () + ':' + d. getSeconds () ) ; 
 
// Built-in întoarce toString ceva 
de genul "Luni o mar 2010 14:25:30 GMT-0500 (EST)":
alert ( d ) ; 

Variabile[modificare | modificare sursă]

Variabilele în standard, JavaScript nu au tip atașat, și orice valoare poate fi stocată în orice variabilă.

Variabilele sunt declarate cu un var declarație, mai multe variabile pot fi declarate la o dată.

Un identificator trebuie să înceapă cu o literă, de subliniere (_), sau semnul dolar ($); caractere ulterioare pot fi, de asemenea, cifre (0-9).

Deoarece JavaScript este case-sensitive, scrisori include caracterele "A" la "Z" (cu majuscule) și caracterele "A" la "Z" (cu litere mici).

Variabilele declarate în afara oricărei funcții sunt globale. În cazul în care o variabilă este declarată într-un domeniu de aplicare mai mare, ea poate fi accesată de către funcțiile apelate de domeniu.

Aici este un exemplu de declarații variabile și valori globale:

var x = 0 ; // o variabilă globală, deoarece nu este în nici o funcție
 
function f () {
  var z = 'foxes' , r = 'birds' ; // 2 variabile locale
  m = 'fish' ; // variabilă globală, deoarece nu a 
fost declarat înainte de nicăieri
  function child () { 
     var r = 'monkeys' ; // Această variabilă este locală și nu afectează  "birds" r  a functiei mamă.
     z = 'penguins' ;  // Funcția copil este capabilă de a accesa variabilele din funcția  mamă
  } 
  twenty = 20 ; //Această variabilă este declarată pe următoarea linie, dar utilizabilă  oriunde în funcția child () ;
  return x ; //Putem folosi x aici, deoarece este globală
} 

Când JavaScript încearcă să rezolve un identificator, se pare, în funcție de domeniul de aplicare locală. Dacă acest identificator nu este găsit, se pare, în funcția de exterior, care a declarat una locală, și așa mai departe de-a lungul lanțului de domeniul de aplicare până când ajunge la domeniul global în cazul în care variabila este globală.

Dacă nu este încă găsit, Javascript va ridica o excepție ReferenceError.

Atunci când atribuirea unui identificator, Javascript face exact același proces pentru a prelua acest identificator, cu excepția faptului că în cazul în care nu se găsește în domeniul global, se va crea "variabila", ca o proprietate a obiectului la nivel global.

Declararea unei variabile (cu cuvântul cheie var), în afara corpului oricărei funcții, va crea, de asemenea, o variabilă nouă la nivel mondial.

Mesaje de eroare[modificare | modificare sursă]

Mesaje de eroare personalizate pot fi create folosind clasa Error:

throw new Error ("Ceva a mers prost.");

Imbricate în instrucțiunile condiționate, aceste instanțe pot înlocui blocurile try/catch:

var emailAddress = ("Va rugam sa introduceti adresa de e-mail:", "");
if ( ! emailAddress || emailAddress. length === 0 ) { 
        throw new Error ("Ne pare rău. Trebuie să introduceți o adresă de e-mail pentru a continua");
} 

Obiectul Math[modificare | modificare sursă]

Obiectul Math conține diversre constante (de exemplu, π) și funcții (de exemplu, cosinuus) legate de matematică.

Obiectul Math nu are nici un constructor, spre deosebire de Array sau Data. Toate metodele sale sunt statice. Toate funcțiile trigonometrice folosesc unghiuri exprimate în radiani , nu în grade .

Proprietățile obiectului Math[modificare | modificare sursă]

Proprietate Valoarea returnată rotunjită la 5 zecimale exacte Descriere
Math.E 2.7183 numărul lui Euler, e
Math.LN2 0.69315 Logaritmul natural din 2
Math.LN10 2.3026 Logaritmul natural din 10
Math.LOG2E 1.4427 Logaritmul în baza 2 din e
Math.LOG10E 0.43429 Logaritmul în baza 10 din e
Math.PI 3.14159 π (raportul dintre circumferința și diametrul unui cerc)
Math.SQRT1_2 0.70711 Rădăcina pătrată a lui ½
Math.SQRT2 1.4142 Rădăcina pătrată a lui 2

Metode ale obiectului Math

Exemplu Valoarea returnată rotunjită la 5 zecimale exacte Descriere
Math.abs(-2.3) 2.3 Valoarea absolută (x < 0) ? -x : x
Math.acos (Math.SQRT1_2) 0.78540 rad. = 45° Arccosinus
Math.asin(Math.SQRT1_2) 0.78540 rad. = 45° Arcsinus
Math.atan(1) 0.78540 rad. = 45° Arctangenta pe jumătatea de cerc (-π/2 , + π/2)
Math.atan2(-3.7, -3.7) -2.3562 Rad. = -135° Arctangenta pe tot cercul (-π ,+π)
Math.ceil(1.1) 2 rotunjirea pana la cel mai mic argument ≥ întreg
Math.cos(Math.PI/4) 0.70711 Cosinus
Math.exp(1) 2.7183 Funcția exponențială : e ridicat la această putere
Math.floor(1.9) 1 Floor: rotunjirea până la cel mai mare număr întreg ≤ argument
Math.log(Math.E) 1 Logaritmul natural, în baza e
Math.max(1, -2) 1 Maximum: (x > y) ? x : y
Math.min(1, -2) -2 Minimum: (x < y) ? x : y
Math.pow(-3, 2) 9 Exponențierea (ridicarea la o putere)
Math.random() 0.17068 Numere pseudoaleatoare cuprinse între 0 (inclusiv) și 1 (exclusiv)
Math.round(1.5) 2 Rotunjirea la cel mai apropiat număr întreg; fracțiile jumătate sunt rotunjite în sus (de exemplu, 1,5 se rotunjește la 2)
Math.sin(Math.PI/4) 0.70711 Sinus
Math.sqrt(49) 7 Rădăcină pătrată
Math.tan(Math.PI/4) 1 Tangentă

Funcții[modificare | modificare sursă]

Fiecare funcție în Javascript este o instanta a obiectului Function:

//x,y este argumentul. 'return x+y' este corpul funcției, care este ultimul în lista de argumente.

var add = new Function ( 'x' , 'y' , 'return x+y' ) ;
var t = add ( 1 , 2 ) ; 
alert ( t ) ; //3 

Funcția “add” de mai sus poate fi, de asemenea, definită folosind următorul model.

function add ( x , y ) {
  return x + y ; 
}

var t = add ( 1 , 2 ) ; 
alert ( t ) ; //3 

O instanță a unei funcți are proprietăți și metode.

function subtract ( x , y ) 
{
  return x - y ; 
}
alert ( subtract. length ) ; //2,expected amount of arguments. 
alert ( subtract. toString () ); 

/* 
 function subtract(x, y) 
{ 
   return x - y;  
 }  
 */

Operatori[modificare | modificare sursă]

Operatorul "+" este supraîncărcat: acesta este folosit pentru concatenarea șirurilor de caractere și pentru operația aritmetică de adunare.

Acest lucru poate cauza probleme atunci când din greșeală se amestecă șiruri de caractere și numere. Problema se poate evita prin conversia unui șir de caractere numeric la un număr.

// Concatenarea a 2 șiruri de caractere
alert ( 'He' + 'llo' ) ; // afișează Hello
 
// Adună două numere
alert ( 2 + 6 ) ; // afișează 8
 
// Concatenarea dintre o expresie numerică și una de tip un șir de caractere 
alert ( 2 + '2' ) ; // afișează 22
alert ( '$' + 3 + 4 ) ; // afișează 34 $, dar $ 7 poate fi de așteptat
alert ( '$' + ( 3 + 4 ) ) ; // afișează $7 alert 
 
// Conversia unui șir la un număr
alert ( + '2' ==== 2 ) ; // afișează true
alert ( + 'Hello' ) ; // afișează Nan

Operatori aritmetici[modificare | modificare sursă]

JavaScript acceptă următorii operatori aritmetici binari:

  • + Adunare
  • - scădere
  • * Înmulțirea
  • / Împărțirea (returnează o valoare în virgulă mobilă)
  • % Restul întreg

JavaScript acceptă următorii operatori aritmetici unari:

  • + Conversia unară de la string la număr
  • - Negare unară (inversează semnul)
  • ++ Incrementare (poate fi prefix sau postfix)
  • -- Decrementare (poate fi prefix sau postfix)
var x = 1 ; 
alert ( ++ x ) ; // afișează: 2
alert ( x ++ ) ; // afișează: 2; apoi x devine 3
alert ( x ) ; // afișează: 3
alert ( x -- ) ; // afișează 3; apoi x devine 2
alert