152
Dr. Sabin Buragaprofs.info.uaic.ro/~busaco Full-Stack Web Development programare Web: JavaScript Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/

Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Full-Stack Web Development

programare Web: JavaScript

Dr. Sabin Corneliu Buraga – profs.info.uaic.ro/~busaco/

Page 2: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

“There are only two kinds of languages: the ones people complain about and the ones nobody uses.”

Bjarne Stroustrup

Page 3: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Inventat de Brendan Eich (1995)

denumit inițial Mocha, apoi LiveScript

inspirat de limbajele Java, Scheme (un dialect Lisp) și Self

oferit în premieră de browser-ul Netscape Navigator

www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript

auth0.com/blog/a-brief-history-of-javascript/medium.com/@benastontweet/lesson-1a-the-history-of-javascript-8c1ce3bffb17

Page 4: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Scop

to turn the Web into a full-blown application platform

Page 5: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Prejudecată

development for the Web is not “serious”

Page 6: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Impediment

inclusion of language design elements unfamiliar to most developers

Page 7: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Realitate

JavaScript has become the de-facto standard programming language of the Web

popularizat de Douglas Crockford:www.crockford.com/javascript/

www.youtube.com/playlist?list=PL62E185BB8577B63D

Page 8: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Standardizat în 1997 de ECMAEuropean Computer Manufacturers Association

ECMAScript

ECMA-262

Page 9: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

ECMAScript

versiunea standardizată în vigoare: ECMAScript 2019 (iunie 2019)

www.ecma-international.org/publications/standards/Ecma-262.htm

Page 10: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

ECMAScript

versiuni anterioare importante: ECMAScript 5.1 (2011)

ecma-international.org/ecma-262/5.1/

es5.github.io/

ECMAScript 2015 – ES6 (2015)git.io/es6features

referința de bază: developer.mozilla.org/JavaScript

acest curs

Page 11: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Limbaj de tip script (interpretat)

destinat să manipuleze, să automatizezeși să integreze funcționalitățile

oferite de un anumit sistem

Page 12: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Limbaj de tip script (interpretat)

nu necesită intrări/ieșiri în mod implicit

Page 13: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Adoptă diverse paradigme de programare

imperativă

à la C

Page 14: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Adoptă diverse paradigme de programare

funcțională

λ calculfuncții anonime, închideri (closures),…

Page 15: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Adoptă diverse paradigme de programare

pseudo-obiectuală

via prototipuri (obiectele moștenesc alte obiecte, nu clase)

Page 16: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Adoptă diverse paradigme de programare

dinamică

variabilele își pot schimba tipul pe parcursul rulării programului

Page 17: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Cum putem executa programele JavaScript?

Page 18: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Mediu de execuție (host-environment)

navigator Web

permite rularea de aplicații Web la nivelul unei platforme(un sistem de operare)

Page 19: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Mediu de execuție (host-environment)

navigator Web

permite rularea de aplicații Web la nivelul unei platforme(un sistem de operare)

inclusiv pe diverse dispozitive – e.g., Android, iOS, Fire OS (Kindle Fire), Universal Windows Platform,… –,

console de jocuri, smart TV-uri și altele

Page 20: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Mediu de execuție (host-environment)

navigator Web

„injectarea” de cod JavaScriptîn documentele HTML via elementul <script>

Page 21: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Mediu de execuție (host-environment)

navigator Web

„injectarea” de cod JavaScriptîn documentele HTML via elementul <script>

cod local/extern referit printr-un URL vs. cod inclus direct în pagina Web

Page 22: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Mediu de execuție (host-environment)

independent de navigatorul Web

platforme de dezvoltare de aplicații distribuite: Node.jsservere Web – nginScript în cadrul Nginx

servere de baze de date – e.g., Apache CouchDBcomponente ale sistemului de operare

aplicații de sine-stătătoare – e.g., Adobe Creative Suite

Page 23: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Cuvinte rezervate:

break else new var case finally return void catch

for switch while continue function this with default

if throw delete in try do instanceof typeof

caracteristici: sintaxa

Page 24: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Alte cuvinte rezervate:

abstract enum int short boolean export interface

static byte extends long super char final native

synchronized class float package throws const

goto private transient debugger implements

protected volatile double import public

caracteristici: sintaxa

Page 25: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Number

reprezentare în dublă precizie

stocare pe 64 biți – standardul IEEE 754

caracteristici: tipuri de date

developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Number

Page 26: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

String

secvențe de caractere Unicode

fiecare caracter ocupă 16 biți (UTF-16)

caracteristici: tipuri de date

developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String

Page 27: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Boolean

expresii ce se pot evalua ca fiind true/false

caracteristici: tipuri de date

developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Boolean

Page 28: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Object

aproape totul e considerat ca fiind obiect,inclusiv funcțiile

caracteristici: tipuri de date

Page 29: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Null

semnifică „nicio valoare”

caracteristici: tipuri de date

Page 30: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Undefined

are semnificația „nicio valoare asignată încă”

caracteristici: tipuri de date

Page 31: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Nu există valori întregi

caracteristici: tipuri de date

Page 32: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Nu există valori întregi

convertirea unui șir în număr: parseInt ()

parseInt ("123") 123parseInt ("11", 2) 3

caracteristici: tipuri de date

indică bazade numerație

Page 33: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

„Valoarea” NaN (“not a number”)

parseInt ("Salut") NaNisNaN (NaN + 3) true

caracteristici: tipuri de date

Page 34: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Valori speciale:

Infinity

–Infinity

caracteristici: tipuri de date

Page 35: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operații avansate cu numere se pot realizavia obiectul predefinit Math

caracteristici: tipuri de date

Page 36: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operații avansate cu numere se pot realizavia obiectul predefinit Math

constante predefinite:Math.PI

Math.E

Math.LN10

etc.

caracteristici: tipuri de date

Page 37: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operații avansate cu numere se pot realizavia obiectul predefinit Math

metode: abs(x) ceil(x) cos(x) exp(x) floor(x) log(x) max(x, …) min(x, …)

pow(x, y) random() round(x) sign(x) sin(x) sqrt(x) trunc(x)

etc.

caracteristici: tipuri de date

developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Math

Page 38: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Un caracter reprezintă un șir de lungime 1

caracteristici: tipuri de date

Page 39: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Șirurile sunt obiecte

"Salut".length 5

caracteristici: tipuri de date

Page 40: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Metode utile pentru procesarea șirurilor de caractere:

charAt(pos) charCodeAt(pos) concat(s1, ..) indexOf(s1, start)

match(regexp) replace(search, replace)

slice(start, end) split(separator, limit)

search(regexp) substring(start, end)

toLowerCase() toUpperCase()

etc.

caracteristici: tipuri de date

Page 41: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Valorile 0, "", NaN, null, undefined

sunt interpretate ca fiind false

!!234 true

caracteristici: tipuri de date

Page 42: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Variabilele se declară cu var

var mărime;

var numeAnimal = "Tux";

variabilele declarate fără valori asignate, se consideră undefined

caracteristici: variabile

Page 43: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Dacă nu se folosește var,atunci variabila este considerată globală

de evitat așa ceva!

caracteristici: variabile

Page 44: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Valorile sunt „legate” tardiv la variabile(late binding)

caracteristici: variabile

Page 45: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Similari celor din C:

pentru numere: + – * / %

testare: == === != !== ?:

asignare: += –= *= /= %=

incrementare și decrementare: ++ – –

logici: ! && ||

concatenare de șiruri: "Java" + "Script" "JavaScript"

caracteristici: operatori

Page 46: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Conversia tipurilor se face „din zbor” (dinamic)

"3" + 4 + 5 "345"

3 + 4 + "5" "75"

adăugând un șir vid la o expresie,o convertim pe aceasta la string

caracteristici: operatori

Page 47: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Comparații: < > <= >= (numere și șiruri)

egalitatea valorilor se testează cu == și !=

1 == true true

caracteristici: operatori

Page 48: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Comparații: < > <= >= (numere și șiruri)

egalitatea valorilor se testează cu == și !=

1 == true true

a se folosi: 1 === true false

caracteristici: operatori

inhibă conversiatipurilor de date

Page 49: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Aflarea tipului unei expresii: operatorul typeoftypeof "Tux" string

caracteristici: operatori

operand rezultat

undefined 'undefined'

null 'object'

de tip Boolean 'boolean'

de tip Number 'number'

de tip String 'string'

Function 'function'

orice alte valori 'object'

Page 50: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operatorii logici && și ||

var nume = unNume || "Implicit";

caracteristici: operatori

Page 51: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operatorul ternar de test ? :

var prezență = (studenți > 33) ? "Prea mulți" : "Cam puțini…";

caracteristici: operatori

Page 52: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Testare: if … else, switchpentru switch, sunt permise expresii la fiecare case

(testarea se realizează cu operatorul ===)

switch (2 + 3) { /* sunt permise expresii */

case 4 + 1 : egalitate ();

break;

default : absurd (); // nu se apelează niciodată

}

caracteristici: control

Page 53: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Ciclare: while, do … while, for

do {

var nume = preiaNume ();

} while (nume != "");

for (var contor = 0; contor < 33; contor++) {

// de 33 de ori…

}

caracteristici: control

Page 54: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Excepții: try … catch … finally

try { // Linii "periculoase" ce pot cauza excepții

} catch (eroare) {// Linii rulate la apariția unei/unor excepții

} finally {// Linii care se vor executa la final

}

caracteristici: control

Page 55: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Excepții: try … catch … finally

try { // Linii "periculoase" ce pot cauza excepții

} catch (eroare) {// Linii rulate la apariția unei/unor excepții

} finally {// Linii care se vor executa la final

}

emiterea unei excepții: throw

throw new Error ("O eroare de-a noastră...");

caracteristici: control

Page 56: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Perechi nume—valoare

caracteristici: obiecte

Page 57: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Perechi nume—valoare

tabele de dispersie (hash) în C/C++tablouri asociative în Perl, PHP sau Ruby

HashMaps în Java

“everything except primitive values is an object”

caracteristici: obiecte

Page 58: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Perechi nume—valoare

numele este desemnat de un șir de caractere(i.e., expresie de tip String)

valoarea poate fi de orice tip, inclusiv null sau undefined

caracteristici: obiecte

Page 59: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Obiect colecție de proprietăți,având mai multe atribute

caracteristici: obiecte

Page 60: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Obiect colecție de proprietăți,având mai multe atribute

proprietățile pot conține alte obiecte,valori primitive sau metode

caracteristici: obiecte

Page 61: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Obiecte predefinite – exemplificări:

Global Object

Function Array

String RegExp

Boolean Number

Math Date

caracteristici: obiecte

de studiat developer.mozilla.org/JavaScript/Reference/Global_Objects

Page 62: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Obiecte fundamentale vizând gestionarea erorilor

Error

EvalError

RangeError

ReferenceError

SyntaxError

TypeError

URIError

caracteristici: obiecte

Page 63: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Create prin intermediul operatorului new:

var ob = new Object();

var ob = { }; // echivalent cu linia anterioară

caracteristici: obiecte

se preferă această sintaxă

Page 64: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Accesarea proprietăților – operatorul .

ob.nume = "Tux";

var nume = ob.nume;

caracteristici: obiecte

Page 65: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Accesarea proprietăților – operatorul .

ob.nume = "Tux";

var nume = ob.nume;

echivalent cu:

ob["nume"] = "Tux";

var nume = ob["nume"];

caracteristici: obiecte

Page 66: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Declarare + asignare:

var pinguin = {

nume: "Tux",

proprietati: {

culoare: "verde",

marime: 17

}

}

caracteristici: obiecte

Page 67: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Declarare + asignare:

var pinguin = {

nume: "Tux",

proprietati: {

culoare: "verde",

marime: 17

}

}

caracteristici: obiecte

accesare:pinguin.proprietati.marime 17

pinguin["proprietati"]["culoare"] "verde"

Page 68: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var facultyContactInfo = {

// numele proprietăților sunt încadrate de ghilimele

"official-phone" : '+40232201090',

city : 'Iași', // dacă numele e identificator valid, ghilimelele pot fi omise

'street' : 'General Berthelot',

'number' : 16, // pot fi folosite orice tipuri de date primitive

"class" : "new", // cuvintele rezervate se plasează între ghilimele

coord : { // obiectele pot conține alte obiecte (nested objects)

'geo' : { 'x': 47.176591, 'y': 27.575930 }

},

age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor

};

console.log (facultyContactInfo.coord["geo"].y); // obținem 27.57593

adaptare după Sergiu Dumitriu (2012)

redare în consola mediului de rulare

Page 69: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Iterarea proprietăților – considerate chei:

var pinguin = { 'nume': 'Tux', 'marime': 17, 'oferta': true };

for (var proprietate in pinguin) {

console.log (proprietate + ' = ' + pinguin[proprietate]);

}

caracteristici: obiecte

Page 70: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Eliminarea proprietăților se realizează cu delete

var pinguin = { 'nume': 'Tux', 'marime': 17 };

pinguin.nume = undefined; // nu șterge proprietatea

delete pinguin.marime; // eliminare efectivă

for (var prop in pinguin) {

console.log (prop + "=" + pinguin[prop]);

}

// va apărea doar "nume=undefined"

caracteristici: obiecte

Page 71: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Tipuri speciale de obiecte

proprietățile (cheile) sunt numere,nu șiruri de caractere

caracteristici: tablouri

developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Array

Page 72: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Se poate utiliza sintaxa privitoare la obiecte:

var animale = new Array ();animale[0] = "pinguin";animale[1] = "omida";animale[2] = "pterodactil";

animale.length 3

caracteristici: tablouri

Page 73: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Se poate utiliza sintaxa privitoare la obiecte:

var animale = new Array ();animale[0] = "pinguin";animale[1] = "omida";animale[2] = "pterodactil";

animale.length 3

notație alternativă – preferată:

var animale = ["pinguin", "omida", "pterodactil"];

caracteristici: tablouri

Page 74: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Elementele pot aparțineunor tipuri de date eterogene

var animale = [33, "vierme", false, "gaga"];

caracteristici: tablouri

Page 75: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Tablourile pot avea „găuri” (sparse arrays):

var animale = ["pinguin", "omida", "pterodactil"];

animale[33] = "om";

animale.length 34typeof animale[13] undefined

caracteristici: tablouri

Page 76: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Tablourile pot avea „găuri” (sparse arrays):

var animale = ["pinguin", "omida", "pterodactil"];

animale[33] = "om";

animale.length 34typeof animale[13] undefined

pentru a adăuga elemente putem recurge la:animale[animale.length] = altAnimal;

caracteristici: tablouri

Page 77: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var vector = [ ];

vector[0] = "zero";

vector[new Date().getTime()] = "now";

vector[3.14] = "pi";

vector[Math.PI] = "un pi mai precis";

for (var elem in vector) {

console.log ("vector[" + elem + "] = " + vector[elem] +

", typeof( " + elem +") == " + typeof (elem));

}

caracteristici: tablouri – exemplu

adaptare după John Kugelman (2009)

Page 78: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

rezultatul obținut în urma rulării programului JavaScript via aplicația JS Bin – jsbin.com

Page 79: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Interări:

for (var it = 0; it < animale.length; it++) {

// de prelucrat animale[it]

}

caracteristici: tablouri

Page 80: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Interări:

for (var it = 0; it < animale.length; it++) {

// de prelucrat animale[it]

}

// variantă mai bună

for (var it = 0, lung = animale.length; it < lung; it++) {

// de prelucrat animale[it]

}

caracteristici: tablouri

de ce?

Page 81: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Metode utile:

toString() concat(item, ..) join(sep) fill(val, start, end)

keys() values()

pop() push(item,…) map(func, arg) reduce(func, val)

reverse() shift() unshift(item,...) slice(begin, end)

filter(func, arg) find(func, arg) every(func, arg)

sort(func) splice(start, delCount, item,...)

caracteristici: tablouri

Page 82: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Definite via function

function transformaPixeliInPuncte (px) {var puncte = px * 300;return puncte;

}

caracteristici: funcții

developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Function

Page 83: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Dacă nu este întors nimic în mod explicit, valoarea de retur se consideră undefined

caracteristici: funcții

Page 84: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Parametrii de intrare pot lipsi, fiind considerați undefined

caracteristici: funcții

Page 85: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Pot fi transmise mai multe argumente,cele în surplus fiind ignorate

transformaPixeliInPuncte (10, 7) 3000

caracteristici: funcții

alte detalii în eloquentjavascript.net/03_functions.html

Page 86: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Funcțiile sunt tot obiecte

astfel, pot fi specificate funcții anonime

caracteristici: funcții

expresiilambda

Page 87: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Funcțiile sunt tot obiecte

astfel, pot fi specificate funcții anonime

în acest sens, JavaScript este un limbaj funcțional

caracteristici: funcții

expresiilambda

Page 88: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var media = function () { // calculul mediei a N numere

var suma = 0;

for (var iter = 0,

lung = arguments.length;

iter < lung; iter++) {

suma += arguments[iter];

}

return suma / arguments.length;

};

caracteristici: funcții

variabilele declarate în funcție nu vor fi

accesibile din exterior, fiind „închise”

funcție closure

Page 89: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

pentru aprofundarea aspectelor vizând programarea funcțională în JavaScript, a se studia

github.com/stoeffel/awesome-fp-js

console.log ( media (9, 10, 7, 8, 7) ) 8.2

Page 90: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

precizați ce efect vor avea liniile de cod următoare:console.log ( typeof (media) );

console.log ( media() );

Page 91: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

variabila media este de tip function

apelul media() întoarce valoarea NaN

Page 92: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

// definirea unei funcții recursive pentru inversarea unui șir de caractere

// (se observă și utilizarea Unicode în cadrul programului)

function inverseazăȘir (șir) {

return șir === '' ? '' : inverseazăȘir (șir.substr (1)) + șir.charAt (0);

}

// testare (folosind diverse caractere Unicode)

console.log (inverseazăȘir ("☞Iñtërnâțiônàlîzætiøn☜"));

caracteristici: funcții recursive

Page 93: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

(în loc de) pauză

Page 94: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Detalii despre trăsăturile vizând programarea orientată-obiect?

Page 95: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

function Animal (nume, marime) {

this.nume = nume; // date-membre

this.marime = marime;

this.oferaNume = function () { // metodă

return this.nume;

};

this.oferaMarime = function () { // metodă

return this.marime;

};

}

caracteristici: obiecte

creational pattern

pseudo-clase(utilizarea

constructorilor)

Page 96: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operatorul new creează un nou obiect vid șiapelează funcția specificată cu this setat pe acest obiect

aceste funcții se numesc constructori,trebuie apelate via new

și, prin convenție, au numele scris cu literă mare

caracteristici: obiecte

Page 97: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Față de alte limbaje de programare, obiectul curent – referit cu this –

este asignat ca fiind obiectul global

de exemplu, în browser, reprezintă fereastra curentăîn care este redat documentul: this window

caracteristici: obiecte

Page 98: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Metodele pot fi declarate și în exteriorul constructorului

function oferaNumeAnimal () {

return this.nume;

}

function Animal (nume, marime) {

this.nume = nume;

this.marime = marime;

this.oferaNume = oferaNumeAnimal; // referă funcția de mai sus

}

caracteristici: obiecte

Page 99: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Orice obiect deține trei tipuri de proprietăți:

named data propertyo proprietate având asignată o valoare

named accessor propertyde tip setter/getter pentru a stabili/accesa o valoare

internal propertyfolosită exclusiv de procesorul ECMAScript

caracteristici: proprietăți

Page 100: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Fiecare proprietate are asociate atributele:

[[Value]] – desemnează valoarea curentă a proprietății[[Writable]] – indică dacă o proprietate

poate să-și modifice valoarea[[Get]] și [[Set]] – funcții opționale pentru a oferi/stabili

valoarea unei proprietăți de tip accessor[[Enumerable]] – specifică dacă numele proprietății

va fi disponibil într-o buclă for-in

[[Configurable]] – indică dacă proprietatea poate fi ștearsă ori redefinită

caracteristici: proprietăți

Page 101: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

proprietăți interne importante (folosite de procesorul ECMAScript, dar inaccesibile la nivel de program)

[[Prototype]] definește ierarhiilor de obiecte

[[Get]] [[Put]] [[CanPut]] pentru accesarea valorilor

[[HasProperty]]

[[DefineOwnProperty]]

[[GetProperty]]

[[GetOwnProperty]]

[[Delete]]

manipularea proprietăților

[[Extensible]] indică obiectele ce pot fi extinse

[[Construct]]

[[Call]]asociate obiectelor executabile

(funcții)

[[Code]]

[[Scope]]desemnează codul și contextul

unei obiect de tip funcție

Page 102: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

// crearea unei proprietăți simple stocând date

// (writable, enumerable, configurabile)

obiect = { };

obiect.numeProprietate = 33;

// crearea via API-ul intern a unei proprietăți stocând date

Object.defineProperty (obiect, "numeProprietate", {

value: 33, writable: true, enumerable: true, configurable: true }

)

caracteristici: proprietăți

Page 103: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

proprietățile interne ale obiectelor definitewww.objectplayground.com

Page 104: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Deoarece orice obiect deține în mod implicit proprietatea prototype,

structura unei „clase” poate fi extinsă ulterior

caracteristici: prototipuri

developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Object/prototype

Page 105: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Deoarece orice obiect deține în mod implicit proprietatea prototype,

structura unei „clase” poate fi extinsă ulterior

un prototip e o proprietate oferind o legătură ascunsă către obiectul de care aparține

caracteristici: prototipuri

Page 106: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

caracteristici: prototipuri

Page 107: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Dacă se încearcă accesarea unui element inexistentîn cadrul unui obiect dat,

se va verifica lanțul de prototipuri (prototype chain)

caracteristici: prototipuri

Page 108: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

function Animal (nume, marime) { // definiție inițialăthis.nume = nume;this.marime = marime;

}

// instanțiem obiecte de tip Animalvar tux = new Animal ("Tux", 17);var pax = new Animal ("Pax", 15);

// pe baza prototipurilor, definim noi metode// disponibile pentru toate obiectele din clasăAnimal.prototype.oferaNume = function () {

return this.nume;};Animal.prototype.oferaMarime = function () {

return this.marime;};

console.log (tux.oferaMarime ());console.log (pax.oferaMarime ());

aceste definiții sunt disponibile

în întreg programul (hoisting)

developer.mozilla.org/docs/Glossary/Hoisting

Page 109: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Page 110: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

caracteristici: obiecte

trasarea pas-cu-pas a execuției programului, cu inspectarea valorilor variabilelor, via www.pythontutor.com/visualize.html#mode=edit

// instanțierea unui obiectvar tux = new Animal ("Tux", 17); console.log (tux.oferaNume ());var jox = tux;console.log (jox.oferaNume ());// alt obiectvar pax = new Animal ("Pax", 15); pax.marime = 21;console.log (pax.oferaMarime ());

Page 111: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

caracteristici: obiecte

trasarea pas-cu-pas a execuției programului, cu inspectarea valorilor variabilelor, via www.pythontutor.com/visualize.html#mode=edit

Page 112: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Pentru a cunoaște tipul unui obiect(pe baza constructorului și a ierarhiei de prototipuri)

se folosește operatorul instanceof

caracteristici: prototipuri

Page 113: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var marimi = [17, 20, 7, 14];

marimi instanceof Array true

marimi instanceof Object true

marimi instanceof String false

var tux = new Animal ("Tux", 17);

tux instanceof Object true

tux instanceof Array false

caracteristici: prototipuri

Page 114: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Adăugarea unei metode se realizează via prototype

Animal.prototype.oferaNumeMare = function () {

return this.nume.toUpperCase ();

};

tux.oferaNumeMare () "TUX"

caracteristici: extinderea claselor

Page 115: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Pot fi extinse și obiectele predefinite:

// adăugăm o metodă obiectului String

String.prototype.inversează = function () {

var inv = '';

for (var iter = this.length - 1; iter >= 0; iter--) { // inversăm șirul…

inv += this[iter];

}

return inv;

};

"Web".inversează() "beW"

caracteristici: extinderea claselor

Page 116: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Cel mai general prototype este cel al lui Object

una dintre metodele disponibile – predefinite –este toString() care poate fi suprascrisă (over-ride)

caracteristici: extinderea claselor

Page 117: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var tux = new Animal ("Tux", 17);

tux.toString () [object Object]

Animal.prototype.toString = function () {return '<animal>' + this.oferaNume () + '</animal>';

};

tux.toString () "<animal>Tux</animal>"

caracteristici: extinderea claselor

Page 118: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Page 119: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Atenție la pericole!

de exemplu, comportamentul diferit al construcțieifor (var proprietate in obiect)

caracteristici: extinderea claselor

Page 120: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

function Animal (nume, marime) { // definiție inițialăthis.nume = nume;this.marime = marime;this.oferaNume = function() { return this.nume; }

}

var tux = new Animal ("Tux", 17);var jox = tux;var pax = new Animal ("Pax", 15);

console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'

// dorim să suprascriem metoda deja existentă în definiția 'clasei'Animal.prototype.oferaNume = function () { return this.nume + ' ' + this.marime; };// suprascriem metoda pentru un obiect particularpax.oferaNume = function () { return this.nume + ' ' + this.marime; };

console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'console.log ('Numele lui Jox: ' + jox.oferaNume ()); // 'Tux'console.log ('Numele lui Pax: ' + pax.oferaNume ()); // 'Pax 15'

discuție

???

Page 121: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

function Animal (nume, marime) { // definiție inițialăthis.nume = nume;this.marime = marime;this.oferaNume = function() { return this.nume; }

}

var tux = new Animal ("Tux", 17);var jox = tux;var pax = new Animal ("Pax", 15);

console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'

// dorim să suprascriem metoda deja existentă în definiția 'clasei'Animal.prototype.oferaNume = function () { return this.nume + ' ' + this.marime; };// suprascriem metoda pentru un obiect particularpax.oferaNume = function () { return this.nume + ' ' + this.marime; };

console.log ('Numele lui Tux: ' + tux.oferaNume ()); // 'Tux'console.log ('Numele lui Jox: ' + jox.oferaNume ()); // 'Tux'console.log ('Numele lui Pax: ' + pax.oferaNume ()); // 'Pax 15'

dacă numele metodei deja există pentru o instanță dată, nu se mai caută în lanțul de prototipuri

discuție

???

Page 122: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Șablon general:

ClasaDeBază = function () { /* … */ };

SubClasa = function () { /* … */ };

SubClasa.prototype = new ClasaDeBază ();

caracteristici: extinderea claselor

Page 123: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Deoarece o funcție reprezintă un obiect, poate fi:

stocată ca valoare (asociată unei variabile)

pasată ca argument al unei alte funcții

întoarsă de o funcție – fiind argument pentru return

caracteristici: funcții de nivel înalt

Page 124: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Dorim să calculăm greutatea unui animalfolosim formula greutate = marime * 33.25

varianta clasică:

var marimi = [17, 20, 7, 14];

var greutati = [ ];

for (var contor = 0; contor < marimi.length; contor++) {

greutati[contor] = marimi[contor] * 33.25;

}

caracteristici: funcții de nivel înalt

Page 125: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Varianta îmbunătățită – mai generală:

function genereazaTablouGreutati (tablou, calcul) {

var rezultat = [ ];

for (var contor = 0; contor < tablou.length; contor++) {

rezultat[contor] = calcul (tablou[contor]);

}

return rezultat;

}

function calculGreutate (marime) {

return marime * 33.25;

}

var greutati = genereazaTablouGreutati (marimi, calculGreutate);

referim funcțiace va realiza calculul

Page 126: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Varianta îmbunătățită – mai generală:

function genereazaTablouGreutati (tablou, calcul) {

var rezultat = [ ];

for (var contor = 0; contor < tablou.length; contor++) {

rezultat[contor] = calcul (tablou[contor]);

}

return rezultat;

}

function calculGreutate (marime) {

return marime * 33.25;

}

var greutati = genereazaTablouGreutati (marimi, calculGreutate);

calcul e variabilăde tip funcție

fiind funcție, se poate apela

Page 127: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

a se consulta șiexemplele din arhivaasociată acestui curs

Page 128: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

JavaScript oferă un singur spațiu de nume, la nivel global

conflicte privind denumirea funcțiilor/variabilelorspecificate de programe diferite,

concepute de mai multi dezvoltatori

caracteristici: încapsulare

Page 129: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Nu trebuie afectat spațiul de nume global,păstrându-se codul-sursă la nivel privat

caracteristici: încapsulare

Page 130: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Codul poate fi complet încapsulatvia funcții anonime

care „păstrează” construcțiile la nivel privat

caracteristici: încapsulare

Page 131: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Declararea imbricată – ca expresii de tip funcție –a funcțiilor anonime are denumirea closures

developer.mozilla.org/JavaScript/Guide/Closures

caracteristici: closures

închideri

Page 132: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Șablonul general:

// specificarea unei expresii de tip funcție

( function () {

// variabilele și funcțiile vor fi vizibile doar aici

// variabilele globale pot fi accesate

} ( ) );

caracteristici: closures

Page 133: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var cod = (function () {var priv = 0; // variabilă privatăfunction start (x) {

// ... poate accesa 'priv' // și funcția 'faCeva'

}function faAia (param) {// ... invizibilă din afară

}

function faCeva (x, y) {// ...

}return { // sunt publice doar// funcțiile 'start' și 'faCeva''start': start, 'faCeva': faCeva

}}) ();

cod.start (arg); // apelăm 'start'

Page 134: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var cod = (function () {var priv = 0; // variabilă privatăfunction start (x) {

// ... poate accesa 'priv' // și funcția 'faCeva'

}function faAia (param) {// ... invizibilă din afară

}

function faCeva (x, y) {// ...

}return { // sunt publice doar// funcțiile 'start' și 'faCeva''start': start, 'faCeva': faCeva

}}) ();

cod.start (arg); // apelăm 'start'

via closures, simulăm metodele privatemodularizare a codului (module pattern)

Page 135: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

var makeCounter = function () {var contorPrivat = 0; // un contor de valori (inițial, zero)function changeBy (val) { // funcție privată

contorPrivat += val; // ce modifică valoarea contorului}return { // funcții publice (expuse)

increment: function() {changeBy (1);

},decrement: function() {

changeBy (-1);},value: function() {

return contorPrivat;}

}; };

Page 136: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

console.log (contor1.value ()); /* 0 */

contor1.increment ();

contor1.increment ();

console.log (contor1.value ()); /* 2 */

contor1.decrement ();

console.log (contor1.value ()); /* 1 */

console.log (contor2.value ()); /* 0 */

Page 137: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Reducerea arității unei funcții

“a technique of transforming a multi-argument function in such a way that it can be called as a chain of functions,

each with a single argument” (G. Kay Lee)

slides.com/gsklee/functional-programming-in-5-minutes

caracteristici: currying

Page 138: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

În loc de (x, y) → x + yputem scrie x→ (y→ x + y)

function f(x, y) {

return x + y;

}

function g(x) {

return function (y) {

return x + y;

}

}

f(33, 74) g(33)(74);

„lanț” de funcții, fiecare având un singur argument

detalii în tutorialul www.sitepoint.com/currying-in-functional-javascript/

Page 139: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Totul în JavaScript este obiect – chiar și funcțiile

de reținut!

Page 140: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Orice obiect este întotdeauna mutabil(poate fi alterat oricând)

proprietățile și metodele sunt disponibileoriunde în program (public scope)

de reținut!

Page 141: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Nu există vizibilitate la nivel de bloc de cod(block scope),

ci doar la nivel global ori la nivel de funcție

de reținut!

Page 142: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Funcțiile ascund orice e definit în interiorul lor

de reținut!

Page 143: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operatorul “.” este echivalentcu de-referențierea:

ob.prop === ob["prop"]

de reținut!

Page 144: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Operatorul new creează obiecte aparținând„clasei” specificate de funcția constructor

de reținut!

Page 145: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Accesorul this este relativ la contextul execuției, nu al declarării

de reținut!

Atenție la dependența de mediul de execuție!

Page 146: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Proprietatea prototype are valorimodificabile (mutable)

de reținut!

Page 147: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

JavaScript Object Notation

json.org

biblioteci de procesare și alte resurse de interes:jsonauts.github.io

json

Page 148: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Format compact standardizat independent de limbaj util pentru interschimb de date

– în termeni de obiecte și literali – între aplicații

permite declararea de structuri de date:colecții de perechi nume—valoare

+liste ordonate de valori

json

www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf

Page 149: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

JavaScript Object Notation

{

'nume': 'Tux',

'stoc': 33,

'model': [ 'candid', 'viteaz' ]

}

json

datele pot fi evaluate direct în JavaScript

Page 150: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

Procesare via obiectul predefinit JSON

JSON.parse()

JSON.stringify()

json

Page 151: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

// definim un șir de caractere ce specifică diverse construcții JSON

// (e.g., preluarea datelor via Ajax/WebSocket-uri de la un serviciu Web/API)

var sirTux = '{ "nume": "Tux", "stoc": 33, "model": [ "candid", "viteaz" ] }';

var tux;

try { // procesăm șirul pentru a genera un obiect JS via obiectul JSON

tux = JSON.parse (sirTux);

} catch (e) { console.log (e.message); /* eroare :( */ }

// redăm la consolă obiectul 'tux' generat cu JSON.parse ()

console.log (tux);

// redăm la consolă serializarea datelor JSON ca șir de caractere

console.log (JSON.stringify (tux));

escaped special characters

Page 152: Full-Stack Web Developmentbusaco/teach/courses/staw/...age : Math.floor ("27.6") // pot fi invocate metode de calcul a valorilor}; console.log (facultyContactInfo.coord["geo"].y);

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co

episodul viitor: programare în JavaScript (continuare)