JavaScript (JS) este un limbaj de programareorientat 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
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
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]
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 */Eroaredesintaxă*/
Tipuri de date
Nedefinit
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
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
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
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
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.)
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
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
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
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
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
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
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 caracterealert('He'+'llo');// afișează Hello// Adună două numerealert(2+6);// afișează 8// Concatenarea dintre o expresie numerică și una de tip un șir de caractere alert(2+'2');// afișează 22alert('$'+3+4);// afișează 34 $, dar $ 7 poate fi de așteptatalert('$'+(3+4));// afișează $7 alert // Conversia unui șir la un număralert(+'2'====2);// afișează truealert(+'Hello');// afișează Nan
varx=1;alert(++x);// afișează: 2alert(x++);// afișează: 2; apoi x devine 3alert(x);// afișează: 3alert(x--);// afișează 3; apoi x devine 2alert(x);// afișează: 2alert(--x);// afișează: 1
În contextul unei operațiuni logice, orice expresie se evaluează la TRUE cu excepția următoarelor:
Strings: "",
Numbers: 0, -0, NaN ,
Special: null, undefined ,
Boolean: false .
Funcția Boolean poate fi folosită pentru a converti în mod explicit la un primitiv de tip Boolean:
// Numai pentru șiruri vide returnează false(Boolean("")====false);alert(Boolean("false")====true);alert(Boolean("0")====true);// Numai pentru zero și Nan returnează falsalert(Boolean(NaN)====false);alert(Boolean(0)====false);alert(Boolean(-0)====false);// echivalent cu -1* 0alert(Boolean(-2)====true);// Toate obiectele returnează adevăratalert(Boolean(this)====true);alert(Boolean({})====true);alert(Boolean([])====true);// Aceste tipuri returnează falsealert(Boolean(null)====false);alert(Boolean(undefined)====false);echivalentcuBoolean()
Operatorul NOT evaluează operandul ca Boolean, și returnează negație.
Folosirea operatorului de două ori într-un rând, ca o negatie dubla, convertește în mod explicit o expresie la un primitiv de tip Boolean:
Expresii care utilizează caracteristici, cum ar fi post-incrementare, ( i++ ), au anticipat efect secundar .
JavaScript oferă scurtcircuitarea evaluarii expresiilor, operandul drept este executat numai în cazul în care operand stânga este suficient pentru a determina valoarea de exprimare.
alert ( a || b ) ; // Atunci când a este adevărat,
nu există niciun motiv de a evalua B.
alert ( a && b ) ; // Atunci când a este fals, nu
există niciun motiv de a evalua B.
alert ( c ? t : f ) ; // atunci când C este adevărat,
nu există niciun motiv de a evalua f.
În primele versiuni de JavaScript și JScript, operatorii logici binare au returnat o valoare Boolean (la fel ca majoritatea limbajelor de programare derivate din C).
Cu toate acestea, toate implementarile contemporane returneaza unul din operanzi:
alert ( a || b ) ; // daca a este adevărat, întoarce, a reveni, altfel B
alert ( a && b ) ; // daca a este falsă, returnează un,
reveni, altfel B
Programatorii care sunt mai familiarizați cu comportamentul în C, s-ar putea găsi această caracteristică surprinzator, dar permite o expresie mai concisă de modele, cum ar fi contopirea nula:
var s = t || "(default)" ; // atribuie T, sau
valoarea implicită în cazul în care t este nulă, gol, etc
Operatori la nivel de bit
JavaScript suportă următorii operatorii binare bit cu bit:
and
Și
or
Sau
xor
Sau exclusiv
<<
Shift stânga (zero fill)
>> Shift (sign-propagating);
copiile bitului cel mai din stânga (bitul de semn), sunt transferate de la în stânga.
>>>
Shift dreapta Shift (zero fill)
~
Nu (inversează biți)
Pentru numerele pozitive, >> și >>> da același rezultat. JavaScript acceptă următorii operatori unari la nivel de bit:
O pereche de acolade {} împreună cu o secvență închisă de declarații constituie o declarație compusă, care poate fi folosită ori de câte ori o declarație poate fi utilizată.
break; este opțională, cu toate acestea, este de obicei necesar, deoarece în caz contrar va fi executat codul corespunzător următoarei condiții.
Adauga o declarație pauză la sfârșitul ultimului caz ca o măsură de precauție.
Valorile siruri de caractere literale poate fi, de asemenea, utilizat pentru valorile de caz. Expresiile pot fi folosite în loc de valori. case default: este opțională. Parantezele sunt necesare.
Instrucțiunea iterativă For
for ( initial ; condition ; loop statement ) {
/ *
declarațiile vor fi executate de fiecare dată
ciclurile for{}, în timp ce
condiția este îndeplinită
* /
}
sau
for ( initial ; condition ; loop statement ) // o declarație
for ( var property_name in some_object ) {
// Declarații folosind some_object [property_name];
}
Reiterează, prin toate proprietățile enumerabile ale unui obiect.
Reiterează, prin toate indicii utilizate de tablou, inclusiv toate proprietățile definite de utilizator de obiect matrice dacă este cazul.
Astfel, acesta poate fi mai bine să utilizați un tradițional pentru buclă, cu un indice numeric atunci cand iterarea peste tablouri.
Există diferențe între browsere web diferite cu privire la proprietățile care vor fi reflectate cu de ..., în loop.
În teorie, acest lucru este controlată de o proprietate de stat internă definită de standardul ECMAScript numit "DontEnum", dar, în practică, fiecare browser-ul returnează un set diferit de proprietăți în timpul introspecție.
Este util pentru a testa pentru o proprietate dat folosind if (some_object.hasOwnProperty(property_name)) { ... } if
(some_object.hasOwnProperty(property_name)) { ... } . if (some_object.hasOwnProperty(property_name)) { ... } .
Astfel, adăugând o metoda de a prototipului matrice cu Array.prototype.newMethod = function() {...} poate provoca pentru ... in loops to loop over the method's name. în bucle la bucla pe numele metodei.
Instrucțiunea iterativă While
while ( condition ) {
statement1;
statement2;
statement3;
...
}
Instrucțiunea iterativă Do ... while
do {
statement1;
statement2;
statement3;
...
} while ( condition ) ;
Instrucțiunea iterativă With
Declarația with stabilește obiectul implicit pentru setul de declarații care urmează.
with ( document ) {
var a = getElementById ( 'a' ) ;
var b = getElementById ( 'b' ) ;
var c = getElementById ( 'c' ) ;
};
Observăm absența documentului înainte de fiecare invocare getElementById(). Semantica este similară celei din Pascal .
Funcții
O funcție este un bloc cu o listă de parametri (eventual gol), care are dat în mod normal, un nume.
O funcție poate utiliza variabile locale.
Dacă ieșiți din funcție fără o declarație de întoarcere, valoarea undefined este returnata.
function gcd ( segmentA , segmentB ) {
var diff = segmentA - segmentB ;
if ( diff === 0 )
return segmentA;
return diff > 0 ? gcd ( segmentB , diff ) : cmmdc (segmentB, dif);
}
alert ( gcd ( 60 , 40 ) ) ; // 20
var mygcd = gcd ; // mygcd este o referință la aceeași funcție ca cmmdc.
alert ( mygcd ( 60 , 40 ) ) ; // 20
Funcțiile sunt obiecte de prima clasa si pot fi alocate altor variabile.
Numărul de argumente al unei funcții nu este necesar să corespundă cu numărul de argumente din definiția funcției, un argument numit în definiția careia ii lipseste un argument din definitia apelului va avea valoarea undefined (care poate fi în mod implicit fals).
În cadrul funcției, argumentele pot fi accesate, de asemenea, prin obiectul arguments; aceasta asigură acces la toate argumentele care utilizează indici (de exemplu, arguments[0], arguments[1], ... arguments[n] ), inclusiv celor dincolo de numărul de argumente. (În timp ce lista de argumente are o proprietate lungime (.length), acesta nu este un exemplu de matrice, ea nu are metode, cum ar fi slice(), sort(), etc.).
function add7 ( x , y ) {
if ( ! y ) {
y = 7 ;
}
alert ( x + y + arguments. length ) ;
} ;
add7 ( 3 ) ; // 11
add7 ( 3 , 4 ) ; // 9
Toți parametrii sunt transmisi prin valoare (pentru obiecte este referinta la obiectul pe care este trecut).
var obj1 = { a : 1 } ;
var obj2 = { b : 2 } ;
function foo ( p ) {
p = obj2 ; // ignores actual parameter
p. b = arguments [ 1 ] ;
}
foo ( obj1 , 3 ) ; // nu afectează complet obj1
3 este parametru suplimentar
alert ( obj1. a + " " + obj2. b ) ; // scrie 1 3
Funcțiile pot fi declarate în interiorul alte funcții, și pot accesa variabilele locale ale funcției exterioare. Mai mult, ei implementeaza metode complete de închidere prin amintirea variabilelor locale funcției exterioare, chiar și după ce s-a iesit din funcția exterioara.
var v = "Top" ;
var bar , baz ;
function foo () {
var v = "fud" ;
bar = function () { alert ( v ) } ;;
baz = function ( x ) { v = x ; } ;
}
Obiecte
Pentru convenienta, tipurile sunt subdivizate în mod normal in tipuri primitive și obiecte.
Obiectele sunt entități care au o identitate (ele sunt doar egale cu ele însele) și care mapeaza proprietatile valorilor ("sloturi", în prototip terminologia de bază a programarii).
Obiectele pot fi gandit ca tablouri asociative sau hashes, și sunt adesea puse în aplicare cu ajutorul acestor structuri de date.
JavaScript are cateva tipuri de obiecte built-in, și anume Array, Boolean, Date, Function, Math, Number, Object,
RegExp and String.
Alte obiecte sunt obiecte "gazdă", definite nu prin limbă, ci de mediul de rulare.
De exemplu, într-un browser, obiecte tipice gazdă aparțin unui DOM (fereastră, formular, link-uri, etc).
Crearea obiectelor
Obiectele pot fi create folosind un constructor sau un obiect literal.
Constructorul poate utiliza fie o funcție încorporată în obiect sau o funcție particularizată.
Este o convenție ca funcțiile de constructor sa fie date de un nume care începe cu o litera mare:
// Constructor
var anObject = new Object () ;
// Obiect literal
var objectA = { } ;
var objectA2 = { } ; // A != A2, {}s create new objects as copies ca exemple.
var objectB = { index1 : 'value 1' , index2 : 'value 2' } ;
// Constructor obisnuit (vezi mai jos)
Literalii de tip obiect și matrice permit crearea cu ușurință de structuri flexibile de date:
var myStructure = {
name : {
first : "Mel" ,
last : "Smith" , },
age : 33 ,
hobbies : ["șah", "jogging"]
} ; };
Aceasta este
baza pentru JSON , care este o simplă notație care utilizează sintaxa bazata pe JavaScript ca sintaxa pentru schimbul de date.
Metode
O metodă este pur și simplu o funcție care este atribuită valoarea de slotul unui obiect.
Spre deosebire de multe
limbaje orientate obiect, nu există nici o distincție între o definiție funcție și o definiție metodă.
Mai degrabă, distincția se produce în timpul
apelarii funcției, o funcție poate fi numit ca o metodă.
Atunci când este apelata ca o metodă, variabila locala standard care este setata automat la
instanța obiectului de la stânga lui ".".
(Există, de asemenea, posibilitatea de a apel și de a aplica metode care pot seta aceasta
în mod explicit, de anumite pachete, cum ar fi jQuery face lucruri neobișnuite cu acest lucru.)
În exemplul de mai jos, Foo este folosit ca un constructor.
Nu este nimic special cu privire la un constructor, aceasta este doar o metodă care este
invocată după ce obiectul este creat aceasta este setată la obiect nou creat..
Rețineți că, în
exemplul de mai jos, Foo este atribuirea de valori pur și simplu la sloturi, dintre care unele sunt functii.
Astfel, se poate atribui diferite funcții la instanțe diferite.
Nu este nici un prototip în acest exemplu.
function px () { return this . prefix + "X" ; }
function Foo ( yz ) {
this . prefix = "a-" ;
if ( yz > 0 ) {
this . pyz = function () { return this . prefix + "Y" ; } ;
} else {
this . pyz = function () { return this . prefix + "Z" ; } ;
}
this . m1 = px ;
}
var foo1 = new Foo ( 1 ) ;
var foo2 = new Foo ( 0 ) ;
foo2. prefix = "b-" ;
alert ( "foo1/2 " + foo1. pyz () + foo2. pyz () ) ;
foo1. m3 = px ; // atribuie funcția în sine, nu sa evaluat rezultatul, adică nu px ()
var baz = { "prefix" : "c-" } ;
baz. m4 = px ; // Nu este nevoie de un constructor pentru a face un obiect.
alert ( "m1/m3/m4 " + foo1. m1 () + foo1. m3 () + baz. m4 () );
foo1. m2 () ; // Throws an exception, because foo1.m2 doesn't exist. . foo1 m2 ();
Constructori
Funcțiile Constructor atribui pur și simplu valori pentru sloturi de un obiect nou creat. Valorile pot fi date sau alte funcții.
Exemplu: Manipularea unui obiect
function MyObject ( attributeA , attributeB ) {
this . attributeA = attributeA ;
this . attributeB = attributeB ;
}
MyObject. staticC = "blue" ; // On MyObject Function, not obj
alert ( MyObject. staticC ) ; // blue
obj = new MyObject ( 'red' , 1000 ) ;
alert ( obj. attributeA ) ; // red
alert ( obj [ "attributeB" ] ) ; // 1000
alert ( obj. staticC ) ; // undefined
obj. attributeC = new Date () ; // add a new property
delete obj. attributeB ; // remove a property of obj
alert ( obj. attributeB ) ; // undefined
delete obj ; // elimina întregul obiect (foarte rar folosit)
alert ( obj. attributeA ) ; // aruncă o excepție
Constructorul în sine este stocat în slotul special de
constructor. Astfel
function Foo () { }
// Utilizarea de "noi", sloturi de prototip și constructor
(de exemplu,
// Foo.prototype = {}; // va seta constructorul la obiect
x = new Foo () ;
// Mai sus este aproape echivalent cu
y = { } ;
y. constructor = Foo ;
y. constructor () ;
// except
x. constructor === y. constructor // adevărat
x instanceof Foo // adevărat
y instanceof Foo // fals
z = new { constructor : Foo } . constructor () ;
z instanceof Foo // adevărat.
// Modificarea Foo.prototype după "new", a fost apelat, se poate schimba
// instanceof results, până când este schimbat din nou, cu o valoare identică
Funcțiile sunt obiecte in sine, care pot fi utilizate pentru a produce un efect
similar cu "proprietăți statice" (folosind terminologia C++ / Java), așa cum se arată mai jos.
(Funcția obiect are, de asemenea,
o proprietate prototip speciala, după cum sa discutat în secțiunea Moștenire de mai jos.)
Ștergerea obiectului este rareori folosita ca motor de scriptare, va colecta obiecte gunoi la care nu se mai face referire.
Moștenire
JavaScript suportă ierarhiile de moștenire prin prototipuri proprii.
În următorul exemplu, clasa derivata
mosteneste de la clasa de baza.
Când d este creat ca un derivat, trimiterea la instanța de bază a obiectului este copiata la d.base.
Derivă nu conține o valoare pentru aBaseFunction, deci acesta este preluat de la Baze atunci
când aBaseFunction este accesată.
Acest lucru este clar prin schimbarea valorii base.aBaseFunction, care se reflectă în
valoarea lui d.aBaseFunction.
Unele implementări permit prototipul, pentru a fi accesate sau pentru a seta în mod explicit prin slotul __proto__ așa
cum se arată mai jos.
function Base () {
this . anOverride = function () { alert ( "Base::anOverride()" ) ; } ;
this . aBaseFunction = function () { alert ( "Base::aBaseFunction()" ) ; } ;
}
function Derived () {
this . anOverride = function () { alert ( "Derived::anOverride()" ) ; } ;
}
base = new Base () ;
Derived. prototype = base ;
d = new Derived () ; // Copiaza prototipul Derived la slotul d al exemplului de prototip ascuns.
base. aBaseFunction = function () { alert ( "Base::aNEWBaseFunction()" ) }
d. anOverride () ;
d. aBaseFunction () ;
alert ( d. aBaseFunction === Derived. prototype . aBaseFunction ) ; // adevărat
alert ( d.__proto__ === base ) ; // adevărat în implementările pe bază de Mozilla, dar fals în multe alte implementări
Următorul exemplu arată în mod clar modul în care trimiterile la prototipuri sunt
copiate pe crearea de exemplu, dar faptul că schimbările la un prototip poate afecta toate instanțele care se
referă la acesta.
function m1 () { return "One" ; }
function m2 () { return "Two" ; }
function m3 () { return "Three" ; }
function Base () { }
Base. prototype . m = m2 ;
bar = new Base () ;
alert ( "bar.m " + bar. M () ) ; // afiseaza bar.m de doua ori
function Top () { this . m = m3 ; }
t = new Top () ;
foo = new Base () ;
Base. prototype = t ;
// Nici un efect asupra foo, referință la t este copiata.
alert ( "foo.m " + foo. m () ) ; //afiseaza foo.m de doua ori
baz = new Base () ;
alert ( "baz.m " + baz. m () ) ; // baz.m de trei ori
t. m = m1 ; //afecteaza Baz, precum și orice alte clase derivate.
alert ( "baz.m1 " + baz. m () ) ; //afiseaza baz.m1 o singura data
În practică, mai
multe variante ale acestor teme sunt folosite, și poate fi atât puternic cat și de confuz.
captureaza excepțiile care rezultă dintr-o
eroare sau o declarație aruncare. Sintaxa sa este, după cum urmează:
try {
// Declarațiile în care excepții ar putea fi aruncate
} catch ( errorValue ) {
// Declaratii care se execută, în caz de excepție
} finally {
// Declarații care se execută după aceea, fie un fel
}
Inițial, declarațiile din cadrul blocului try executa.
În cazul în care este aruncata o exceptie, fluxul de script-ul de control
o transferă imediat la situațiile în bloc de captură, cu excepția disponibila ca argument de eroare.
În caz contrar, se sare peste blocul de captură.
Blocul de captură poate arunca o valoare de eroare în cazul în care nu vrea să se ocupe de o
eroare specifica.
În orice caz, instrucțiunile din blocul final sunt întotdeauna executate.
Acest lucru poate fi folosit pentru resurse gratuite.
Clauzele catch si finally pot fi omise. Argumentul de captură este necesar.
Implementarea Mozilla
permite punerea în aplicare pentru declarații de captură multiple, ca o extensie a standardului ECMAScript.
Acestea urmează o sintaxă similară celei utilizate în Java :
try { statement ; }
catch ( e if e === "InvalidNameException" ) { statement ; }
catch ( e if e === "InvalidIdException" ) { statement ; }
catch ( e if e === "InvalidEmailException" ) { statement ; }
catch ( e ) { statement ; }
Într-un browser, evenimentul onerror este
mai frecvent utilizat pentru a capta excepții.
Peta Rusia dengan Krai Kamchatka yang ditandai Ini adalah daftar permukiman pedesaan di Krai Kamchatka. Krai Kamchatka (Rusia: Камча́тский край, tr. Kamchatsky kray, IPA: [kɐmˈtɕatskʲɪj kraj]) adalah sebuah subjek federal (sebuah krai) di Rusia. Krai ini secara geografis terletak di wilayah Timur Jauh Rusia, dan krai tersebut secara administratif merupakan bagian dari Distrik Federal Timur Jauh. Krai Kamchatka memiliki populasi sebanyak 322.079 (2010).[...
Часть серии статей о Холокосте Идеология и политика Расовая гигиена · Расовый антисемитизм · Нацистская расовая политика · Нюрнбергские расовые законы Шоа Лагеря смерти Белжец · Дахау · Майданек · Малый Тростенец · Маутхаузен ·&...
Strada statale 730del Nucleo Industriale di MonterotondoDenominazioni precedentiNuova strada ANAS 377 Bretella Salaria Sud LocalizzazioneStato Italia Regioni Lazio DatiClassificazioneStrada statale InizioSP 15/a presso svincolo Castelnuovo di Porto dell'A1 dir FineNucleo industriale di Monterotondo Lunghezza2,615[1] km Data apertura2010[2] GestoreANAS (2012-) Manuale La strada statale 730 del Nucleo Industriale di Monterotondo (SS 730), già nuova strada ANAS 377 Bre...
Pour les articles homonymes, voir Pellicer. José PellicerBiographieNaissance 27 avril 1912ValenceDécès 8 juin 1942 (à 30 ans)Nationalité espagnoleActivités Anarcho-syndicaliste, mécanicien, homme politique, syndicaliste, anarchiste, anarchist militiamanAutres informationsIdéologie AnarchismeMembre de Confédération nationale du travailLos SolidariosMilices confédéralesColonne de fer (en)modifier - modifier le code - modifier Wikidata José Pellicer Gandía, né le 27 avril 19...
Election for the Governor of Vermont 1824 Vermont gubernatorial election ← 1823 October 14, 1824 (1824-10-14) 1825 → Nominee Cornelius P. Van Ness Joel Doolittle Party Democratic-Republican Democratic-Republican Popular vote 13,413 1,962 Percentage 85.3% 12.5% Governor before election Cornelius P. Van Ness Democratic-Republican Elected Governor Cornelius P. Van Ness Democratic-Republican Elections in Vermont Federal government Presidential elec...
Metal vikingEnslaved di Festival Rock Norwegia 2010Sumber aliran Black metal folk metal Musik rakyat Nordik musik Eropa power metal rok viking Sumber kebudayaanAkhir 1980-an – pertengahan 1990-an; Eropa UtaraAlat musik yang biasa digunakan Gitar listrik gitar bas drum keyboard Nordik Instrumen rakyat Bentuk turunanPagan metalVersi regional Nordic countries Austria Canada Germany Netherlands Russia United Kingdom United States Topik lainnya Daftar grup musik Mitologi nordik Paganisme nordik ...
Artikel ini perlu dikembangkan agar dapat memenuhi kriteria sebagai entri Wikipedia.Bantulah untuk mengembangkan artikel ini. Jika tidak dikembangkan, artikel ini akan dihapus. Kishori Amonkarकिशोरी आमोणकरVidushi Srimati Kishori AmonkarInformasi latar belakangLahir10 April 1931[1]Mumbai, IndiaMeninggal3 April 2017(2017-04-03) (umur 85)Mumbai, IndiaGenreMusik klasik HindustaniInstrumenvokalArtis terkaitMogubai Kurdikar Kishori Amonkar[a] (10 April 1...
Universitas Okmin PapuaJenisUniversitasDidirikan2021Lembaga indukKementerian Pendidikan dan Kebudayaan Republik IndonesiaRektorDr. Suryasastriya Trihandaru, M.Sc.natAlamatOksibil, Pegunungan Bintang, IndonesiaAfiliasiYayasan Pendidikan Okmin PapuaSitus webyapediopa.org Universitas Okmin Papua (disingkat UOP) adalah sebuah perguruan tinggi swasta di Kabupaten Pegunungan Bintang, Papua Pegunungan yang berdiri pada tahun 2021. Pegunungan Bintang adalah sebuah kabupaten terisolir di dekat perbata...
German politician Kurt SchmückerSchmücker in 1971Federal Minister for the TreasuryIn office1 December 1966 – 21 October 1969Preceded byWerner DollingerFederal Minister of FinanceIn office8 November 1966 – 2 December 1966Preceded byRolf DahlgrünSucceeded byFranz Josef StraussFederal Minister of EconomicsIn office17 October 1963 – 30 November 1966[1]Preceded byLudwig ErhardSucceeded byKarl SchillerMember of the BundestagIn office7 September 1949 ...
State recreation area in Oregon, USA Roads End State Recreation SiteRoads End State Recreation Site SignShow map of OregonShow map of the United StatesTypePublic, stateLocationLincoln County, OregonNearest cityLincoln CityCoordinates45°00′29″N 124°00′34″W / 45.0081629°N 124.0095577°W / 45.0081629; -124.0095577[1]Operated byOregon Parks and Recreation Department Roads End State Recreation Site is a state park in the U.S. state of Oregon, ad...
Overview of climatic conditions in India A scene in Uttarakhand's Valley of Flowers National Park. In contrast to the rain shadow region of Tirunelveli, the park receives ample orographic precipitation due to its location in a mountainous windward-facing region wedged between the Zanskars and the Greater Himalayas. The formation of the Himalayas (pictured) during the Early Eocene some 52 mya was a key factor in determining India's modern-day climate; global climate and ocean chemistry ma...
French political scientist and international relations specialist Bertrand Badie (born 1950) is a French political scientist and international relations specialist, emeritus professor at Sciences Po.[1] He is one of the most renowned French specialists in international relations.[2] Bertrand Badie is a French political scientist Bibliography Bertrand Badie, The sociology of the State, University of Chicago Press, 1983, ISBN 9780226035499 Bertrand Badie, The imported State...
Wakil Bupati PuncakPetahanaPelinus Balinal, S.Th., S.Ip., M.Si.sejak 24 September 2018Masa jabatan5 tahunDibentuk25 April 2013Pejabat pertamaRepinus Telenggen, S.Pd., M.M.Situs webpuncakkab.go.id Berikut ini adalah daftar Wakil Bupati Puncak dari masa ke masa. No Wakil Bupati Mulai Jabatan Akhir Jabatan Prd. Ket. Bupati 1 Repinus TelenggenS.Pd., M.M. 25 April 2013 15 Februari 2018 1 [Ket. 1][1] Willem WandikS.E., M.Si. Jabatan kosong 15 Februari 2018 25 April 2018 ...
Elector of Saxony (r. 1694–1733); Ruler of Poland-Lithuania (r. 1697–1706, 1709–33) Augustus IIPortrait of Augustus with the star of the Polish Order of the White Eagle, by Louis de SilvestreElector of SaxonyReign27 April 1694 – 1 February 1733PredecessorJohn George IVSuccessorFrederick Augustus IIKing of PolandGrand Duke of LithuaniaReign15 September 1697 –13 October 1706Coronation 15 September 1697Wawel CathedralPredecessorJohn IIISuccessorStanisław IReign9 October 1709 –1 Febr...
Página inicial del primer volumen del Dictionary El Dictionary of National Biography (DNB) (en español: Diccionario Nacional de Biografía) es un diccionario biográfico en lengua inglesa, publicado por primera vez entre 1885 y 1901 en 63 volúmenes, en el cual aparecen en orden alfabético por apellido, las biografías de eminentes personalidades que vivieron en el Reino Unido. Historia La obra fue ideada en torno al 1880 por el editor George Smith (1824-1901) de la casa editorial Smith, E...
Questa voce sull'argomento calciatori brasiliani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Éder Monteiro FernandesNazionalità Brasile Altezza183 cm Calcio RuoloDifensore Termine carriera2017 CarrieraSquadre di club1 2001 Paraguaçuense? (?)2002 Independência? (?)2003 Independente-SP? (?)2004 Americano-MA? (?)2005-2006 Vasco da Gama? (?)2007-2009 Noroeste? (?)2009&...
Anthus pratensis Anthus pratensis Pipit farlouseClassification COI Règne Animalia Embranchement Chordata Sous-embr. Vertebrata Classe Aves Ordre Passeriformes Famille Motacillidae Genre Anthus EspèceAnthus pratensis(Linnaeus, 1758) Statut de conservation UICN NT : Quasi menacé Le Pipit farlouse (Anthus pratensis), également appelé Pipit des prés ou Béguinette en wallon[1], est une espèce de passereaux appartenant à la famille des Motacillidae. Le pipit farlouse est une des esp�...
Piotrków TrybunalskiNight view of Old Town, Słowacki Street, Piotrkowska Manufaktura, street in Old Town, Royal Castle, Market Square Hiệu kỳHuy hiệuTập tin:Piotrkow Trybunalski logo 2018.jpgBiểu trưngLỗi Lua trong Mô_đun:Location_map tại dòng 583: Không tìm thấy trang định rõ bản đồ định vị. "Mô đun:Location map/data/Łódź Voivodeship", "Bản mẫu:Bản đồ định vị Łódź Voivodeship", và "Bản mẫu:Location map ...