1 Programare WEB - Operatori La Nivel de Bit

download 1 Programare WEB - Operatori La Nivel de Bit

of 11

Transcript of 1 Programare WEB - Operatori La Nivel de Bit

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    1/11

    Programare WEB - Operatori la nivel de bit

    ...Pornind de la dreapta la stanga , 1100 poate fi calculat folosind expresia :

    0*20+ 0*21+ 1*22+ 1*23= 12Atunci cand JS stocea!a nu"ere intregi in "e"orie el re!er#a cate 32 de $iti pentru fiecare . %ndiferent daca #o"introduce nu"ere in siste"ul !eci"al , octal sau exa!eci"al Ja#aScript le #a trasnfor"a in for"a $inara .

    Pentru #alorile negati#e , $itul cel "ai din stanga , de ni#elul cel "ai ridicat , repre!inta o #aloare negati#a egala cu &'2 31( .)olosindul , pute" incepe cu &'231( si sai adauga" #alori po!iti#e ' repre!entate de ceilalti 31 de $iti ( , pentru a genera

    orice nu"ar negati# "ai "are sau egal cu &'231( .Ja#aScript ne ofera acces la repre!entarea $inara a unui nu"ar intreg prin inter"ediul operatorilor la ni#el de $it . el "aisi"plu operator la acest ni#el este operatorul unar pentru co"ple"entar , si"$oli!at prin tilda - . )unctia sa este de a

    in#ersa totii $itii operandului sau . l este clasificat ca operator de negare , deoarece neaga fiecare $it. /aca un $it are#aloarea 1 #a de#eni 0 iar #aloarea 0 #a de#eni 1 .asirea co"ple"entarului poate fi descrisa astfel :x=-12x=-1100

    x=0011x=3

    PA% 4%% 4A 5%64 / 7%

    and folosi" operatori logici la ni#el de $it in Ja#aScript se cuplea!a operan!ii $it cu $it , apoi se executa operatia asuprafiecarei pereci de $iti . /e exe"plu , folosind operatorul la ni#el de $it A5/ asupra nu"erelor 01111 si 11011 #o" o$tine01011 . ci#alentele lor $inare sunt aliniate de la dreapta la stanga , for"and cinci pereci de $iti . Perecile sunt dupaaceea operate in "od independent si este generat un nu"ar nou .Pentru a exe"plifica cele de "ai sus ur"ariti ta$elul de "ai 8os :

    9PS% ;4A;4 9PS%%

    0

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    2/11

    po!iti# par de un nu"ar de ori la 2 . %n ca!ul unui nu"ar intreg po!iti# i"parefectul este de i"partire la 2 si ignorarea restului . Bai 8os a#e" si un

    exe"plu :1@1 intoarce C ' 11111 intoarce 0111 (

    operatorul de deplasare spre dreapta si co"pletare cu !erouri intoarce #aloarea

    unui nu"ar intreg daca $itii sai au fost deplasati cu un nu"ar de !erouri spredreapta . oti $itii #acanti la ni#el "ai "are sunt co"pletati cu !erouri . andoperea!a asupra nu"erelor intregi po!iti#e acest operator produce acelasi efectca si cand sar folosi operatorul de deplasare spre dreapta care trans"itese"nul .

    Acest lucru se datorea!a faptului ca $itul de se"n care este copiat e totdeauna!ero pentru nu"erele intregi po!iti#e . %n ca!ul nu"erelor intregi negati#e oricedeplasare spre dreapta si co"pletare cu !erouri #a "odifica $itul de ni#el cel"ai ridicat din 1 in 0 . e!ultatul #a fi totdeauna un nu"ar intreg "ai "are sauegal cu 0 . Bai 8os a#e" si unele exe"ple :1@1 intoarce C ' 11111 intoarce 0111 (1@1 intoarce 21DCDE3FD0 ' 111111111111111111111111111100011

    intoarce 11111111111111111111111111111000 (

    re$uie sa "entione! ca lucrul propriu!is cu $iti & sau la ni#el de $it & apare foarte rar in JS . ste posi$il ca niciodata incadrul de!#oltarii de scripturi sa nu folosi" acesti operatori . xista totusi unele ca!uri speciale cand tratarea datelor inacest "od de#ine necesara .;n exe"plu de astfel de situatie este atunci cand sunt necesari operatori la ni#el de $it pentru a transfor"a un nu"ar din$a!a 10 in $a!a 1F . Acest lucru este necesar deoarece JS ne per"ite sa afisa" doar repre!entarea $inara a unui nu"ar aflat

    in "e"orie . 5u #o" de!#olta su$iectul la acest "o"ent dar atrag atentia ca exista totusi ca!uri & desi extre" de rare cand#a tre$ui sa utili!a" acest tip de operatori la ni#el de $it .

    P/5A PA%4

    %n ca!ul utili!arii expresiilor care folosesc "ai "ult de un operator JS nu e#aluea!a expresia de la dreapta la stangatotdeauna , el tine sea"a de precedenta predefinita a fiecarui operator . %n ca!ul in care apar "ai "ulti operatori cu aceeasiprecedenta JS ii #a e#alua de la stanga spre dreapta .%n ta$elul de "ai 8os se pre!inta operatorii in ordinea precedentei lor , cu operatorii din partea de 8os a ta$elului a#andprecedenta "axi"a :

    PA 5;B PA

    , #irgula

    = += = *= G= H= ??= = = = = de atri$uire

    I conditional

    SA; logic

    9 pe $iti

    < S% pe $iti

    == K= de egalitate

    ? ?= = de co"paratie

    ?? de deplasare $e $iti

    + de adunareGscadere

    * G H de in"ultireGi"partire

    K - ++ de negareGincre"entare

    '( LM . de apelare , pentru structuri de date

    1.1 Structuri de control si cicluri ale li"$a8ului

    %5S;%;5% 5/%%5A4

    a. if

    Aceasta este una dintre instructiunile cele "ai des utili!ate . )iecare li"$a8 de progra"are o detine intro for"a sau alta siutili!area ei nu poate fi e#itata . Sintaxa ei este :

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    3/11

    in 'conditie( NinstructiuniOconditie poate fi orice expresie logica . /aca re!ultatul sau este true sunt executate instructiunile din $locul ifului , dacaeste false se trece peste $loc .

    a o for"a de a "entine scriptul cat "ai li!i$il se foloseste foarte des indentarea instructiunilor $locului %) , dintreacolade . Acest lucru este de "are a8utor "ai ales in ca!ul i"$ricarii "ai "ultor instructiuni %) .

    $. if..else

    %n ca!ul in care nu pute" utili!a un %) si"plu tre$uie sa apela" la o #ersiune a sa , instructiunea %)..4S , care executa un$loc de instructiuni in ca!ul in care conditia are #aloare true si alt $loc in ca!ul false . Sintaxa instructiunii apare "ai 8os :if 'conditie( Ninstructiuni1

    Oelse Ninstructiuni2O

    xista posi$ilitatea i"$ricarii unui alt set %)..4S ciar pe una dintre ra"urile instructiunii initiale , creand astfel o"etoda de a e#alua "ai "ulte scenarii posi$ile .Bai 8os a#e" un exe"plu de utili!are a acestei instructiuni :?t"l?ead?titleJS?Gtitle?Gead

    ?$od?script tpe=textG8a#ascript?K#ar su"asu"a=10if 'su"[email protected]( N

    docu"ent.Qrite'Bultu"i" K(O else Ndocu"ent.Qriteln'Bultu"i" dar "ai puteti cu"para (OGG ?Gscript

    ?G$od?Gt"l%n acest exe"plu utili!atorul #a pri"i doua "esa8e diferite , in functie de #aloarea #aria$ilei su"a .

    %5S;%;5% / %4A

    a. for Pentru a incepe un ciclu intrun script utili!a" instructiunea ) . Sintaxa generala a instructiunii este ur"atoarea :

    for ' initiali!are conditie ciclu( NinstructiuniOele trei expresii dintre parante!ele rotunde sunt optionale dar daca o"ite" una dintre ele se"nul punct si #irgula tre$uie

    sa ra"ana , in acest "od fiecare expresie ra"anand in locul in care tre$uia sa apara ./e o$icei folosi" initiali!are pentru a da o #aloare initiala& si de "ulte ori ciar pentru a declara & unei #aria$ile pe careo #o" folosi drept index sau contor al ciclului . Apoi conditie este e#aluata la true inainte de fiecare executie ainstructiunilor dintre acolade . . ciclu incre"entea!a sau decre"entea!a #aria$ila folosita drept contor al ciclului .%n exe"plul de "ai 8os #o" folosi o instrucitune ) pentru a afisa nu"erele intre 0 si @0 :

    ?script tpe=textG8a#ascript?K

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    4/11

    docu"ent.Qrite'5u"ere intre 0 si @0 (docu"ent.Qrite'R?r si!e=0 Qidt=2@HR(for '#ar i=0i?@1i++( Ndocu"ent.Qrite'i+ , (OGG

    ?Gscripta si in ca!ul instructiunii %) si la ) poate apare i"$ricarea instructiunilor . /eoarece nu sunte" li"itati la un singurciclu i"$ricat pute" creste nu"arul )urilor i"$ricate la oricate dori" .

    $. for..inAceasta instructiune necesita cunostinte despre o$iectele JS asa ca in "od nor"al #a tre$ui sa re#eniti asupra ei dupaintroducerea acestor ele"ente in cadrul lucrarii in capitolele ur"atoare .u )..%5 pute" executa cate un set de instructiuni pentru fiecare proprietate dintrun o$iect . Pute" folosi ciclul cu

    orice o$iect JS , indiferent daca are sau nu proprietati . Pentru fiecare proprietate se executa cate o iteratie , asa ca dacao$iectul nu are nici o proprietate nu se desfasoara nici un ciclu . )..%5 lucrea!a si cu o$iectele particulari!ate o#aria$ila a unui astfel de o$iect JS este considerata o proprietate si astfel se executa cate un ciclu pentru fiecare . Sintaxaco"en!ii este :

    for ' proprietate in o$iect ( NinstructiuniOproprietate este un literal de tip sir generat de JS . Pentru fiecare ciclu lui proprietate i se atri$uie ur"atorul nu"e deproprietate continut in o$iect , pana ce sunt folosite toate .xe"plul de "ai 8os foloseste aceasta functie pentru a afisa fiecare nu"e de proprietate din o$iectul /ocu"ent , alaturi de

    toate #alorile proprietatilor :?script tpe=textG8a#ascript?K#ar o$iect=docu"ent#ar info=

    for '#ar nu"eProprietate in o$iect( Ninfo=nu"eProprietate+ = +o$iectLnu"eProprietateMdocu"ent.Qrite'info+?$r(OGG?Gscript

    c. QileAceasta co"anda actionea!a ase"anator cu un ciclu ) , dar nu include si functia de initiali!are sau incre"entare a#aria$ilelor . re$uie sa declara" #aria$ilele inainte si sa le incre"enta" sau decre"enta" in $locul de instructiuni .

    Sintaxa sa este :Qile 'conditie( NinstructiuniO

    %n exe"plul de "ai 8os #o" pre!enta o #aria$ila logica drept indicator pentru a deter"ina daca "ai continua" sau nu ciclul. Aceasta #aria$ila , status , este sta$ilita la false si ciclul se intrerupe :?script tpe=textG8a#ascript?K

    #ar i=0#ar re!ultat=0#ar status=truedocu"ent.Qrite'0(Qile'status( Nre!ultat+=++i

    docu"ent.Qrite' + +i(if 'i==10( Nstatus=false

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    5/11

    OOdocu"ent.Qriteln' = +re!ultat(GG?Gscript

    d. do..QileAceasta instructiunie a fost introdusa incepand cu #ersiunea 1.2 a Ja#aScript . /iferenta fata de instructiunea Qile constain executarea totdeauna cel putin o data a setului de instructiuni aferent lui do..Qile acest lucru este posi$il datorita

    faptului ca expresia conditionala este #erificata dupa pri"a iteratie a co"en!ii .Sintaxa sa apare su$ for"a :

    do NinstructiuniOQile 'conditie(

    e. $rea si continueAtunci cand folosi" un ciclu acesta , in "od predefinit , continua sa se execute pana ce conditia specificata de#ine falsa .;neori insa exista ca!uri cand a#e" ne#oie sa pute" iesi dintrun ciclu inainte de a fi a8uns la finalul sau . Acest lucru seface adaugand fie $rea fie continue in $locul de instructiuni al ciclului .

    %nstructiunea $rea intrerupe definiti# ciclul , in ti"p ce continue sare peste instructiunile ra"ase din iteratia curenta ,e#aluea!a expresia ciclului ' daca exista ( si trece la ur"atoarea iteratie .%n scriptul de "ai 8os puteti #edea in actiune aceste doua instructiuni . Progra"ul calculea!a prin incercari succesi#eradacina patrata a nu"arului n .Se porneste cu i=0 , ciclul for incepe afisand #aloarea lui i . Apoi , scriptul #erifica daca n nu este negati# in ca! ca este

    ciclul este intrerupt definiti# . /aca n este po!iti# atunci i este in"ultit cu propria #aloare si re!ultatul este co"parat cu n ./aca re!ultatul este "ai "ic decat n atunci i este stocat ca fiind pentru "o"ent cel "ai "are nu"ar care este egal sau"ai "ic decat radacina patrata a lui n . %nstructiunea continue sare peste restul ciclului curent si porneste din nou de lainceputul ciclului dupa incre"entarea lui i . %n "o"entul in care i la patrat este "ai "are decat n scriptul trece lainstructiunea $rea care opreste co"plet ciclarea :

    ?script tpe=textG8a#ascript?K#ar "ax5u"ar=#ar n=101docu"ent.Qrite'?r5u"arul a carui radacina o cauta" este +n+?$r(for '#ar i=0i?ni++( N

    docu"ent.Qrite'i+?$r(if 'n?0( Ndocu"ent.Qrite'5 este negati# K($reaOif 'i*i?=n( N

    "ax5u"ar=icontinueOdocu"ent.Qrite'?$rer"inat($rea

    Odocu"ent.Qrite'?$r5u"arul gasit : +"ax5u"ar(GG?Gscript

    f. la$elot incepand cu #ersiunea Ja#aScript 1.2 li"$a8ul ne ofera si "odalitati de a fi "ai specifici atunci cand folosi" $reasau continue . %nstructiunea la$el poate fi plasata inaintea oricarei structuri de control care poate i"$rica alteinstructiuni , ceea ce ne per"ite sa iesi" dintro instructiune conditionala sau dintrun ciclu la o locatie specifica din script .

    Pentru a da un exe"plu practic al utili!arii acestei instructiuni executati scriptul care ur"ea!a :?script tpe=textG8a#ascript

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    6/11

    ?K#ar stop9=3#ar stopT=Edocu"ent.Qrite'oate perecile x, dintre '0,0( si '(docu"ent.Qrite'stop9+ , +stopT+(:?$r(loop9:

    for '#ar x=0x?10++x( N for '#ar =0?10++( N docu"ent.Qrite''+x+ , ++( (if ''x==stop9(

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    7/11

    ?script tpe=textG8a#ascript?K#ar cerere=5u"esQitc'cerere( Ncase 4ogo: docu"ent.Qrite'R?i"g src=logo.8pg alt=logo?$rR( $rea

    case 5u"e: docu"ent.Qrite'RSoftQare S4.R( $reacase Produse: docu"ent.Qrite'RProduseR( $rea

    default: docu"ent.Qrite'RQQQ.site.roR( $rea

    OGG?GscriptSintaxa instructiunii este identica cu cea din li"$a8ele sau Ja#a , pre!entarea ei teoretica fiind :

    sQitc'#aria$ila( Ncase #aloare1U#aria$ila : instructiuni $rea case #aloare2U#aria$ila : instructiuni $rea ...default : instructiuni $rea

    O6aloarea #aria$ilei este co"parata pe rand cu #alorile din instructiunile case in ca!ul in care nu este gasita nici oegalitate se executa auto"at instructiunile din cadrul eticetei default .%n ca!ul in care ar lipsi instructiunile $rea functionarea sQitcului ar fi "odificata . /e la "o"entul la care #aloarea#aria$ilei sa potri#it cu cea a unei eticete case se #or executa in continuare toate instructiunile din fiecare eticetacase care e#entual "ai exista .

    1.2 )unctii Ja#aScript

    functie JS este de fapt un script care este desprins ca o sectiune separata de cod si careia i se da un nu"e . )olosind acest

    nu"e un alt script poate apela executarea acelei sectiuni de oricate ori are ne#oie de el . Aceasta posi$ilitate exista in "area"a8oritate a li"$a8elor de progra"are ciar daca denu"irea specifica este functie , "etoda , procedura sau su$rutina .and sunt apelate functii acestea pot pri"i si unele #alori , nu"ite argu"ente . Aceste argu"ente pot fi folosite ca #aria$ilein cadrul functiei respecti#e . /upa ce date sunt atri$uite unei #aria$ile pute" sa le prelucra" sau sa le folosi" in calcule si, e#entual , sa returna" un re!ultat .

    AA );5%%4Sintaxa folosita pentru a crea o functie este :function nu"e)unctie ' argu"ent1 , argu"ent2 , .. ( N

    instructiuniOu#antul ceie care specifica existenta functiei este function in ca!ul in care nu dori" sa introduce" nici un argu"enteste totusi o$ligatorie folosirea parante!elor dupa nu"e functiei .

    /4AAA );5%%4 functie poate fi declarata in orice po!itie in cadrul unui script . Singura restrictie este legata de i"posi$ilitatea declarariiunei functii in cadrul altei functii sau in interiorul unei structuri de control .

    xista insa inca un ele"ent de care tre$uie sa tine" sea"a in practica . Asa cu" unele $locuri diferite ale unui docu"entVB4 saunt incarcate inaintea altora acelasi lucru este #ala$il si pentru scripturile inglo$ate in aceste $locuri . /in aceastacau!a este de preferat ca functiile sa fie declarate in sectiunea ?ead a docu"entului VB4 acest lucru asiguradisponi$ilitatea lor in ca!ul in care un alt script tre$uie sa le utili!e!e i"ediat .?ead

    ?script tpe=textG8a#ascript?Kfunction culori'( N

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    8/11

    docu"ent.fgolor=reddocu"ent.$golor=$lueOGG?Gscript?Gead

    ?$od?script tpe=textG8a#ascript?Kculori'(

    docu"ent.Qriteln'W(GG

    ?GscriptScriptul de "ai sus are ca efect "odificarea culorilor de fundal si principale ale paginii Qe$ . %n ca!ul in care functiaculori'( ar fi declarata dupa scriptul din sectiunea ?$od atunci ea nu ar reali!a ni"ic deoarece apelul scriptului anteriorei ar cauta o functie care la "o"entul acela nu a fost incarcata .

    AP4AA );5%%4/upa cu" ati putut #edea si in exe"plul anterior de script apelarea unei functii se face prin nu"ele ei ur"at de parante!erotunde in ca!ul in care functia tre$uie sa preia si un nu"ar de para"etri acestia sunt introdusi in interiorul parante!elor

    rotunde .

    A;B5 %B%S );5%%4/efinirea unei functii cu para"etri ' argu"ente ( da posi$ilitatea utili!arii ei in "ai "ulte "oduri .Spre a da un exe"plu sa considera" pro$le"atica reali!arii unei functii care este refolosita de "ai "ulte ori in progra" dar

    una dintre #alorile din interiorul ei tre$uie sa se "odifice la fiecare apelare a functiei .Aceasta pro$le"a in particular poate fi solutionata si prin folosirea de #aria$ile glo$ale dar pentru "o"ent #o" folosisolutia unei functii cu argu"ente .?ead

    ?script tpe=textG8a#ascript?Kfunction da7inar'intreg( N#ar re!ultat=#ar re!ultatScurt=for '#ar i=1i?32i++( N

    if 'intreg < 1 == 1( N re!ultat=1+re!ultat re!ultatScurt=re!ultat O else N re!ultat=0+re!ultatO

    intreg=intreg1Oreturn're!ultatScurt(OGG

    ?Gscript?Gead?$od?script tpe=textG8a#ascript?K#ar sir7inar=

    x=Xdocu"ent.Qrite'x(?ead?script tpe=textG8a#ascript?Kfunction $inar'intreg( N#ar re!ultat=

    #ar re!ultatScurt=for '#ar i=1i?32i++( N if 'intreg < 1 ==1( N

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    9/11

    re!ultat=1+re!ultat re!ultatScurt=re!ultat O else N re!ultat=0+re!ultatOintreg=intreg1

    Oreturn're!ultatScurt(OGG

    ?Gscript?Gead

    ?$od?script tpe=textG8a#ascript?K#ar sir7inar=x=Xsir7inar=da7inar'x(

    docu"ent.Qrite'5u"arul +x+ in $inar este :(docu"ent.Qrite'sir7inar(docu"ent.Qriteln'6aria$ila x este egala cu : +x(x=2@@sir7inar=da7inar'x(

    docu"ent.Qrite'5u"arul +x+ in $inar este :(docu"ent.Qrite'sir7inar(docu"ent.Qriteln'6aria$ila x este egala cu : +x(GG?Gscript?G$od

    and apela" functia da7inar'( aceasta pri"este o copie a #alorii care este stocata in x . Acest proces se nu"estetransfer prin #aloare . 6aloarea este apoi atri$uita #aria$ilei intreg iar aceasta poate fi folosita ca #aria$ila locala afunctiei . /aca intreg isi "odifica #aloarea in cadrul functiei aceasta nu #a afecta #aloarea lui x$ser#ati si folosirea cu#antului ceie return . Acesta face ca functia sa returne!e o #aloare spre locatia din progra" carea apelato .

    Pute" folosi functii care intorc #alori oriunde folosi" o expresie nor"ala . ;nele functii intorc re!ultatul unui set decalcule in ti"p ce altele intorc o #aloare logica pentru a anunta starea desfasurarii unei operatii ' cu succes sau nu ( .

    B/%)%AA 5;BA;4;% / A;B5

    functie accepta un anu"it nu"ar de argu"ente specificare care apare in "o"entul declararii ei . Apar insa ca!uri incare dori" sa trans"ite" functiei un nu"ar diferit de argu"ente aceasta se o$isnuieste atunci cand se apelea!a o functiecare foloseste acelasi para"etru de fiecare data , dar este construita pentru a trata ca!uri speciale .%ntrun astfel de ca! pute" folosi o #aloare presta$ilita in interiorul functiei daca nu sunt transferate argu"ente .%n cele ce ur"ea!a introduce" un script care afisea!a un "esa8 de salut atunci cand utili!atorul a8unge la o pagina Qe$ .

    Progra"ul afisea!a unul dintre "esa8e dupa cu" cunoaste sau nu nu"ele #i!itatorului . /aca nu"e;ser nu este null#aria$ila a fost definita . Acest lucru este posi$il nu"ai daca o #aloare , ca Presedinte , a fost transferata functiei . /acafunctia este egala cu null atunci scriptul e#ita folosirea #aria$ilei in "esa8ul de salut .?ead

    ?script tpe=textG8a#ascriptfunction "esa8'nu"e;ser( Nif 'nu"e;serK=null( Ndocu"ent.Qriteln'Salut +nu"e;ser( Oelse Ndocu"ent.Qriteln'7ine ati #enit in siteul nostruK(

    OOGG?Gscript?$od?script tpe=textG8a#ascript

    ?Kdocu"ent.Qriteln'Pri"ul apel al functiei "esa8'(?$r("esa8'Presedinte(

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    10/11

    docu"ent.Qriteln'?$r?$rAl doilea apel al functiei?$r("esa8'(GG?Gscript alta posi$ilitate este ca unei functii sai fie transferate "ai "ulte argu"ente decat au fost specificate la declararea ei .

    6alorile supli"entare nu sunt pierdute ci se stocea!a intrun ta$lou nu"it argu"ents , care exista i"plicit pentru oricefunctie . oate argu"entele sunt stocate in acest ta$lou si pot fi extrase in interiorul $locului de instructiuni al functiei . /eexe"plu , pentru a extrage pri"ul argu"ent transferat functiei "esa8'( din exe"plul anterior folosi" instructiunea :

    pri"ulArgu"ent = "esa8.argu"entsL0M

    oate ta$lourile JS sunt indexate pornind de la 0 . a sa gasi" nu"arul total de argu"ente transferate pute" folosi oinstructiune speciala care ne returnea!a lungi"ea unui ta$lou :nu"arArgu"ente = "esa8.argu"ents.lengt%"ple"entand instructiunile de "ai sus sa creat o noua #ersiune a scripturilor anterioare pentru a raspunde "ai corect in

    functie de faptul cunoasterii sau nu a nu"elui #i!itatorului :?ead?script tpe=textG8a#ascriptfunction "esa8'nu"e;ser( N

    if 'nu"e;serK=null( Ndocu"ent.Qriteln'Salut din nou +nu"e;ser(O else Ndocu"ent.Qriteln'7ine ati #enit la siteul nostru(Onu"arArgu"ente="esa8.argu"ents.lengtif'nu"arArgu"ente1( N

    for '#ar i=1i?nu"arArgu"entei++( N docu"ent.Qriteln'"esa8.argu"entsLiM(OOO?Gscript?Gead?$od

    ?script tpe=textG8a#ascript#ar nu"e;ser=Alex, extraBesa8=5u nea" #a!ut de "ult#ar nu"e;ser2=null#ar extraBesa81=6rei sa de#ii "e"$ru I#ar extraBesa82=e poti inscrie online"esa8'nu"e;ser,extraBesa8(docu"ent.Qriteln'?r(

    "esa8'nu"e;ser2,extraBesa81,extraBesa82(?Gscript?G$od

    A5S);4 7%4 P%5 )%5A

    /esi pro$le"atica o$iectelor JS o #o" detalia in capitolul ur"ator e $ine de stiut inca de acu" ce se inta"pla cand folosi"o$iectele in con8unctie cu functiile "ai exact ce se inta"pla atunci cand folosi" ca argu"ent pentru o functie un o$iect .and se transfera unei functii , ca argu"ent , un tip de date si"plu ca sir , nu"ar sau $oolean acest transfer se face prin

    #aloare , acest lucru inse"nand ca functia u!ea!a practic de o copie a #aria$ilei , orice "odificari aduse de functieneafectand originalul .Atunci cand transfera" unei functii un argu"ent o$iect acesta este transferat prin referinta . Acest lucru insea"na cafunctia are dreptul si ciar o face sa "odifice direct originalul o$iectului . 4uand in considerare acest fapt JS aduce siposi$ilitatea de a i"paceta un tip si"plu de date in interiorul unui o$iect , in ca!ul in care preferea" transferul prinreferinta al unei #aria$ile de un tip si"plu .

    );5%% ;S%6 functie JS poate fi recursi#a , adica se poate autoapela . ea "ai des intalnita "odalitate de a de"onstra aceastacapacitate este re!ol#area ecuatiilor factoriale .

    %n continuare #o" #edea un exe"plu de functie JS recursi#a care afla factorialul unui nu"ar dat n .function factorial'n( N

  • 7/23/2019 1 Programare WEB - Operatori La Nivel de Bit

    11/11

    #ar re!ultatif 'n0( Nre!ultat=n*factorial'n1(O else if 'n==0( N re!ultat=1 O else N

    re!ultat =null Oreturn're!ultat(O

    Acest "odel de functie cred ca nu "ai necesita explicatii foarte la$orioase , ea #erificand intai daca n este "ai "are decat

    0 , apoi in ca! afir"ati# n se in"ulteste cu re!ultatul intors de apelarea functiei cu argu"entul n1 . %n "o"entul in caren a8unge 0 aparitia cea "ai i"$ricata a functiei se inceie si intoarce pri"a #aloare . JS se retrage si inceie fiecarefunctie i"$ricata pana ce a8unge la apelarea initiala a functiei factorial , apoi intoarce re!ultatul final .