prethodna      sadržaj         slijedeća      
Vodič za core JavaScript 1.5 



Poglavlje 3   Izrazi i operatori


Ovo poglavlje objašnjava JavaScript izraze i operatore za pridruživanje, upoređivanje, aritmetičke, bitwise, logičke, string i specijalne operatore.

Evo što ovdje možete naći:



Izrazi

Izraz je bilo kakav valjani skup podataka, varijabli, operatora i izraza kojem je rezultat jednostruka vrijednost (broj, string ili neka logička vrijednost).

Postoje dvije vrste izraza: oni koji pridružuju vrijednost varijabli i oni koji jednostavno sadrže neku vrijednost. Npr., izraz x = 7 je izraz koji x varijabli pridružuje vrijednost 7, pa je rezultat ovog izraza 7. Takvi izrazi koriste operatore  pridruživanja. S druge strane, izraz 3 + 4 jednostavno daje rezultat 7; ovdje pridruživanje nije izvršeno. Operatori koji se koriste u ovim izrazima nazivaju se jednostavno operatori (npr. + u gornjem izrazu).

JavaScript ima slijedeće vrste izraza:



Operatori

JavaScript ima slijedeće vrste operatora.

JavaScript ima i binary i unary operatore. Binary operator treba dva operanda, jedan ispred i jedan iza operatora:

operand1 operator operand2

Npr., 3+4 ili x*y.

Unary operator treba samo jedan operand, ili ispred ili iza operatora:

operator operand

ili

operand operator

Npr., x++ or ++x.

Nadalje, JavaScript ima jedan ternary (trostruki) operator, uvjetni operator. Ternary operator treba tri operanda.


Operatori pridruživanja

Operator pridruživanja pridružuje neku vrijednost lijevom operandu ovisno o vrijednosti desnog operanda. Osnovni operator pridruživanja je jednako (=), koji pridružuje vrijednost desnog operanda lijevom operandu. To jest, x = y pridružuje x-u vrijednost y.

Ostali operatori pridruživanja jesu skraćenja standardnih operacija, kao što je prikazano u narednoj tablici.


Tablica 3.1    Operatori pridruživanja




skraćeni operator

značenje

x += y

 

x = x + y

 

x -= y

 

x = x - y

 

x *= y

 

x = x * y

 

x /= y

 

x = x / y

 

x %= y

 

x = x % y

 

x <<= y

 

x = x << y

 

x >>= y

 

x = x >> y

 

x >>>= y

 

x = x >>> y

 

x &= y

 

x = x & y

 

x ^= y

 

x = x ^ y

 

x |= y

 

x = x | y

 


Operatori upoređivanja

Operator upoređivanja upoređuje operande, a za rezultat daje logičku vrijednost ovisno o tome da li je izraz istinit. Operandi mogu biti numerički, string, logički ili imati vrijednost objekta. Stringovi se upoređuju na osnovu standardnih leksikografskih upoređivanja, upotrebom Unicode vrijednosti. U narednoj tablici nalaze se operatori upoređivanja.


Tablica 3.2    operatori upoređivanja




operator

obja�njenje

Primjeri koji daju true1

Jednako ( ==)  

Daje true (istina) ako su operandi jednaki. Ako operandi nisu istog tipa, JavaScript pokušava pretvoriti operande tako da se omogući njihovo upoređivanje.  

3 == var1
"3" == var1
3 == '3'

 

Nejednako ( !=)  

Daje true ako operandi nisu jednaki. Ako operandi nisu istog tipa, JavaScript pokušava pretvoriti operande tako da se omogući njihovo upoređivanje.    

var1 != 4
var2 != "3"

 

Strogo jednako ( ===)  

Daje true ako su operandi jednaki i istog tipa.  

3 === var1

 

Strogo nejednako (!==)  

Daje true ako operandi nisu jednaki i/ili nisu istog tipa.  

var1 !== "3"
3 !== '3'

 

Veće od ( >)  

Daje true ako je lijevi operand veći od desnog.  

var2 > var1

 

Veće od ili jednako ( >= )  

Daje true ako je lijevi operand veći ili jednak od desnog.  

var2 >= var1
var1 >= 3

 

Manje od ( <)  

Daje true ako je lijevi operand manji od desnog.  

var1 < var2

 

Manje od ili jednako ( <=)  

Daje true ako je lijevi operand manji ili jednak od desnog.

var1 <= var2
var2 <= 5

 

1 Ovi primjeri uzimaju da var1 ima vrijednost 3, a var2 vrijednost 4.

 


Arithmetički operatori

Arithmetički operatori uzimaju numeričke vrijednosti (bilo podatke ili varijable) za svoje operande i daje za rezultat jednostruku numeričku vrijednost. Standardni arithmetički operatori su: zbrajanje (+), oduzimanje (-), množenje (*) i dijeljenje(/). Ovi operatori djeluju kao i kod drugih programskih jezika, osim što / operator daje floating-point vrijednost, a ne cjelobrojnu vrijednost kao npr. u C-u ili Javi. Npr:

1/2 //daje 0.5 u JavaScript-u
1/2 //daje 0 u Javi

JavaScript arithmetički operatori prikazani su u slijedećoj tabeli.


Tablica 3.3    arithmetički operatori




operator

opis

primjer

%
(modulus)
 

Binary operator. Daje cjelobrojnu vrijednost dijeljenja.  

12 % 5 daje 2.  

++
(uvećanje)
 

Unary operator. Operandu dodaje jedan. Ako se koristi kao prefix (++x), daje vrijednost nakon uvečavanja operanda za jedan. Ako se koristi kao postfix operator ( x++), daje vrijednost prije uvečavanja operanda za jedan

Ako x je 3, onda ++x postavlja x u 4 i daje 4, dok x++ postavlja x u 4 ali daje 3.  

--
(umanjenje)
 

Unary operator. Oduzima 1 od operanda. Rezultat je analogan operatoru uvećanja.  

Ako x je 3, onda --x postavlja x u 2 i daje 2, dok x++ postavlja x u 2 ali daje 3.  

-
(Unary negacija)
 

Unary operator. Mijenja predznak operanda.  

Ako x je 3, onda -x daje -3.  


Bitwise operatori

Bitwise operatori tretiraju svoje operande kao set od 32 bita (nule i jedinice), radije nego decimalne, hexadecimalne ili oktalne brojeve. Npr., decimalni broj 9 binarno izgleda kao 1001. Bitwise operatori izvode operacije na ovakvim binarnim brojevima, ali kao rezultat daju standardne JavaScript numeričke vrijednosti.

U narednoj tablici je sažetak JavaScript bitwise operatora.


Tablica 3.4    bitwise operatori




operator

upotreba

opis

Bitwise AND  

a & b

 

Daje jedan u svakoj bit poziciji ukoliko su oba bita na toj poziciji jedinice.  

Bitwise OR  

a | b

 

Daje jedan u svakoj bit poziciji ukoliko su jedan ili oba bita na toj poziciji jedinice.  

Bitwise XOR  

a ^ b

 

Daje jedan u svakoj bit poziciji ukoliko je jedan ali ne i oba bita na toj poziciji jedinice.

Bitwise NOT  

~ a

 

Invertira bite operanda.  

Lijevi pomak  

a << b

 

Pomiče a za b bita ulijevo, mijenjajući bitove zdesna u nule.  

Sign-propagating desni pomak 

a >> b

 

Pomiče a za b bita udesno, odbacujući bite pomaknute zdesna.  

Zero-fill desni pomak  

a >>> b

 

Pomiče a za b bita udesno, odbacujući bite pomaknute zdesna i mijenjajući u nule bite slijeva.  


Bitwise logički operatori

U osnovi bitwise logički operatori rade prema slijedećem:

Npr., binarno 9 je 1001, a 15 je 1111. Ako primjenimo bitwise operatore tada ćemo imati slijedeće:


Bitwise shift (pomak) operatori

Bitwise shift operatori uzimaju dva operanda: prvi je broj nad kojim se izvodi operacija, a drugi određuje za koliko mjesta (bita) će se izvršiti pomak. Smjer pomicanja ovisi o upotrijebljenom operatoru.

Shift operatori pretvaraju operande u 32-bitne integere i daju rezultat istog tipa kao lijevi operand.

Shift operatori nalaze se u narednoj tabeli.


Tablica 3.5    bitwise shift operatori




operator

opis

primjer

<<
(Lijevi pomak)
 

Ovaj operator pomiče prvi operand određeni broj bita ulijevo. Vi�ak pomaknutih bita ulijevo se odbacuje. Nula bitovi se pomiču zdesna.  

9<<2 daje 36, jer 1001 pomakuto 2 bita ulijevo postaje 100100, što je 36.  

>>
(Sign-propagating desni pomak)
 

Ovaj operator pomiče prvi operand određeni broj bita udesno. Višak pomaknutih bita udesno se odbacuje. Kopije najljevijeg bita se pomiču s lijeva.  

9>>2 daje 2, jer 1001 pomaknuto 2 bita udesno postaje 10, što je 2. Slično, -9>>2 daje -3, jer je predznak sačuvan.  

>>>
(Zero-fill desni pomak)
 

Ovaj operator pomiče prvi operand određeni broj bita udesno. Višak pomaknutih bita udesno se odbacuje. Nula bitovi se pomiču slijeva.  

19>>>2 daje 4, jer 10011 pomaknut 2 bita udesno postaje 100, što je 4.Za pozitivne brojeve, zero-fill desni pomak i sign-propagating desni pomak daju iste rezultate.  


Logički operatori

Logički operatori se obično koriste uz Boolean (logičke) vrijednosti i daju Boolean vrijednosti kao rezultat. Pa ipak,  && i || operatori daju vrijednost jednog od operanada, pa tako ako su ovi operatori kori�teni sa ne-Boolean vrijednostima, onda će dati ne-Boolean vrijednost. Pogledajte u tablici logičke operatore.


Tablica 3.6    logički operatori




operator

upotreba

opis

&&  

expr1 && expr2

 

(Logički AND) Daje expr1 ako se može pretvoriti u false (laž); inače daje expr2. Tako, kada koristimo Boolean vrijednosti, && daje true ako su oba operanda true; u protivnom daje false.  

||  

expr1 || expr2

 

(Logički OR) Daje expr1 ako se može pretvoriti u true; inače daje expr2. Tako, kada koristimo Boolean vrijednosti, || daje true ako je jedan od operanada true; ako su oba false, daje false.  

!  

!expr

 

(Logičke NOT) Daje false ako njegov operand se može pretvoriti u true; u protivnom daje true.  

Primjeri izraza koji se mogu pretvoriti u false jesu oni koji kao rezultat daju null, 0, prazan string (""), ili nedefinirano.

Naredni code prikazuje primjere && (logičkog AND) operatora.

a1=true && true       // t && t daje true
a2=true && false      // t && f
daje false
a3=false && true      // f && t
daje false
a4=false && (3 == 4)  // f && f
daje false
a5="Cat" && "Dog"     // t && t
daje Dog
a6=false && "Cat"     // f && t
daje false
a7="Cat" && false     // t && f
daje false

Naredni code prikazuje primjere || (logičkog OR) operatora.

o1=true || true       // t || t daje true
o2=false || true      // f || t daje true
o3=true || false      // t || f daje true
o4=false || (3 == 4)  // f || f daje false
o5="Cat" || "Dog"     // t || t daje Cat
o6=false || "Cat"     // f || t daje Cat
o7="Cat" || false     // t || f daje Cat

Naredni code prikazuje primjere ! (logičkog NOT) operatora.

n1=!true              // !t daje false
n2=!false             // !f daje true
n3=!"Cat"             // !t daje false


Kratkospojna procjena

Budući da se logički izrazi procjenjuju slijeva nadesno, testiraju se na moguće "kratkospojne" procjene koristeći slijedeća pravila:

Uočite da dio nešto se ne procjenjuje.


String operatori

String operatori jesu operator ulančanja (+) koji ulančava dva stringa, a za rezultat daje drugi string koji je spoj ova dva. Npr., "my " + "string" daje string "my string".

Skraćeni operator pridruživanja += može se takođe upotrijebiti za ulančavanje stringova. Npr., ako varijabla mystring ima vrijednost "alpha," tada izraz mystring += "bet" daje "alphabet" i pridružuje ovu vrijednost varijabli mystring.


Specijalni operatori

JavaScript daje slijedeće specijalne operatore:


uvjetni operator

Uvjetni operator je jedini JavaScript operator koji ima tri operanda. Operator može poprimiti jednu od dvije vrijednosti na osnovu zadanog uvjeta. Sintaksa je:

uvjet ? val1 : val2

Ako je uvjet true, operator ima vrijednost val1. U protivnom poprima vrijednost val2. Možete koristiti uvjetni operator uvijek kad koristite standardni operator.

Npr.,

status = (age >= 18) ? "adult" : "minor"

Ovaj izraz pridružuje vrijednost "adult" varijabli status ako je age 18 ili više. U protivnom pridružuje vrijednost "minor"  status varijabli.


zarez operator

Zarez operator (, ) procjenjuje oba operanda i daje vrijednost drugog operanda. Ovaj operator se prvenstveno koristi unutar for petlje, da omogući ažuriranje za više varijabli unutar petlje.

Npr., ako je a 2-dimenzionalni niz (matrica) od 10 elemenata naredni code će koristiti zarez operator za povećanje dvije varijable istodobno. Code printa vrijednosti dijagonalnih elemenata u matrici:

for (var i=0, j=9; i <= 9; i++, j--)
   document.writeln("a["+i+","+j+"]= " + a[i*10 +j])

Uočite da dvodimenzionalni nizovi još nisu podržani. Ovaj primjer oponaša dvodimenzionalni niz koristeći pri tom jednodimenzionalni.


delete

Delete operator briše objekt, svojstvo objekta, ili element na određenom indexu u nizu. Sintaksa je:

delete objectName
delete objectName.property
delete objectName[index]
delete property // legalno samo u with izrazu

gdje je objectName naziv objekta, property je postojeće svojstvo i index je integer koji određuje lokaciju elementa u nizu.

Četvrti oblik je legalan samo uz with izraz za brisanje svojstva u objektu.

Možete upotrijebiti delete operator za brisanje varijabli deklariranih implicitno, ali ne i onih deklariranih sa var izrazom.

Ako je delete operator uzastopan, tada postavlja svojstvo ili element na undefined (nedefinirano) . D elete operator daje true ukoliko je operacija moguća, odnosno false ako nije.

x=42
var y= 43
myobj=new Number()
myobj.h=4      // stvara svojstvo  h
delete x       //daje true (mo�e se brisati ako je deklarirana implicitno)
delete y       // daje false (ne mo�e brisati ako je deklarirano sa  var)
delete Math.PI // daje false (ne mo�e brisati predefinirana svojstva)
delete myobj.h // daje true (mo�e brisati user-definirana svojstva)
delete myobj   // daje true (mo�e se brisati ako je deklarirana implicitno)


Brisanje elemenata niza
Kada brišete element niza to ne utiče na duljinu niza. Npr., ako obrišete a[3], a[4] je jo� uvijek a[4], a a[3] postaje nedefiniran.

Kada delete operator obriše element niza onda taj element nije više u nizu. U narednom primjeru, trees[3] je obrisan pomoću delete.

trees=new Array("redwood","bay","cedar","oak","maple")
delete trees[3]
if (3 in trees) {
   // ovo se neće izvr�iti
}

Ako želite da element niza postoji ali da ima nedefiniranu vrijednost, upotrijebite undefined ključnu riječ umjesto delete operatora. U narednom primjeru, varijabli trees[3] se pridružuje vrijednost undefined te element niza još uvijek postoji:

trees=new Array("redwood","bay","cedar","oak","maple")
trees[3]=undefined
if (3 in trees) {
   // ovo će se izvr�iti
}


in

Operator in daje true ako je određeno svojstvo u određenom objektu. Sintaksa glasi:

propNameOrNumber in objectName

gdje je propNameOrNumber string ili numerički izraz koji predstavlja naziv svojstva ili index niza, a objectName je naziv objekta.

Naredni primjeri pokazuju neke primjene in operatora.

// Nizovi
trees=new Array("redwood","bay","cedar","oak","maple")
0 in trees        //daje true
3 in trees        // daje true
6 in trees        // daje false
"bay" in trees    // daje false (mora se odrediti broj indexa,
                  // ne vrijednost na tom indeksu)
"length" in trees // daje true (length je svojstvo niza)

// Predefinirani objekti
"PI" in Math          // daje true
myString=new String("coral")
"length" in myString  //daje true

// Custom (vlastiti) objekti
mycar = {make:"Honda",model:"Accord",year:1998}
"make" in mycar  // daje true
"model" in mycar // daje true


instanceof

Operator instanceof daje true ako je objekt određenog tipa. Sintaksa je:

objectName instanceof objectType

gdje je objectName je naziv objekta koji se upoređuje sa objectType, a objectType je tip objekta, kao npr. Date ili Array.

Upotrijebite instanceof kada hoćete potvrditi tip objekta u runtime-u.

Npr., naredni code koristi instanceof da odredi da li theDay je Date objekt. Izrazi u if izrazu se izvršavaju jer theDay jest Date objekt .

theDay=new Date(1995, 12, 17)
if (theDay instanceof Date) {
   // izrazi se izvr�avaju
}


new

Operator new možete upotrijebiti za stvaranje user-definiranog object tipa ili jednog od predefiniranog tipa objekata Array , Boolean , Date, Function , Image , Number, Object , Option , RegExp, ili String . Na serveru, može se koristiti uz DbPool, Lock , File ili SendMail. Upotrijebite new prema slijedećem:

objectName = new objectType ( param1 [, param2] ...[,paramN] )

Objekti se također mogu kreirati sa objekt inicijalizatorima, kao što je opisano u  "Upotreba objekt inicijalizatora" str. 93.

Pogledajte new u Core JavaScript Reference za detaljnije informacije.


this

Upotrijebite this ključnu riječ za ukazivanje na trenutni objekt. Sintaxa je:

this[.propertyName]

Primjer 1. Pretpostavimo da imate funkciju validate koja provjerava svojstvo objekta te high i low vrijednosti:

function validate(obj, lowval, hival) {
   if ((obj.value < lowval) || (obj.value > hival))
      alert("Invalid Value!")
}

<B>Unesite broj između 18 i 99:</B>
<INPUT TYPE = "text" NAME = "age" SIZE = 3
   onChange="validate(this, 18, 99)">

Primjer 2. U kombinacji sa form svojstvom ovo može ukazivati na parent form objekta. U narednom primjeru, obrazac myForm sadrži Text objekt i dugme. Kada korisnik klijkne na dugme vrijednost Text objekta se postavlja na naziv obrasca. Dugmetov onClick rukovalac događaja koristi this.form da ukaže na parent obrazac, myForm.

<FORM NAME="myForm">
Naziv obrasca:<INPUT TYPE="text" NAME="text1" VALUE="Beluga">
<P>
<INPUT NAME="button1" TYPE="button" VALUE="Show Form Name"
   onClick="this.form.text1.value=this.form.name">
</FORM>


typeof

Operator typeof se koristi kao jedan od slijedećih načina:

1. typeof operand
2. typeof (operand)

Operator typeof daje za rezultat string koji pokazuje tip neprcjenjenog operanda. operand je string, varijabla, ključna riječ ili objekt od kojeg dobivamo tip. Zagrade nisu obavezne.

Pretpostavimo da ste definirali slijedeće varijable:

var myFun = new Function("5+2")
var shape="round"
var size=1
var today=new Date()

Operator typeof daje sljedeće rezultate:

typeof myFun je funkcija
typeof shape je string
typeof size je broj
typeof today je objekt
typeof dontExist je nedefinirano

Za ključne riječi true i null, typeof operator daje:

typeof true je boolean
typeof null je objekt

Za broj ili string, typeof operator daje:

typeof 62 je broj
typeof 'Hello world' je string

Za svojstva, typeof operator daje tip vrijednosti koje svojstvo sadr�i:

typeof document.lastModified je string
typeof window.length je broj
typeof Math.LN2 je broj

Za metode i funkcije, typeof operator daje:

typeof blur je funkcija
typeof eval je funkcija
typeof parseInt je funkcija
typeof shape.split je funkcija

Za predefinirane objekte, typeof operator daje:

typeof Date je funkcija
typeof Function je funkcija
typeof Math je funkcija
typeof Option je funkcija
typeof String je funkcija


void

Operator void se koristi na jedan od slijedećih načina:

1. void (expression)
2. void expression

Operator void određuje izraz koji se procjenjuje bez povratne vrijednosti. Izraz je JavaScript izraz koji se procjenjuje. Zagrade nisu obavezne, ali ih je dobro upotrijebiti.

Može se upotrijebiti void operator za određivanje izraza kao npr. hypertext link. Izraz se procjenjuje ali se ne učitava umjesto trenutnog dokumenta.

Naredni code stvara hypertext link koji ne radi ni�ta kada korisnik klikne na njega. Kada se klikne na link, void(0) daje nedefinirano, koje nema efekt u JavaScriptu.

<A HREF="javascript:void(0)">Klikni ovdje da ne napraviš ništa</A>

Slijedeći code kreira hypertext link koji potvrđuje obrazac kada se klikne na njega.

<A HREF="javascript:void(document.form.submit())">
Kliknite za potvrdu</A>


Prioritet operatora

Prioritet operatora određuje poredak koji će se primjeniti pri procjeni izraza. To se može nadići upotrebom zagrada.

Naredna tablica pokazuje prioritet operatora od najnižeg ka najvišem.







tip operatora

individualni operatori

zarez  

,

 

pridruživanje  

= += -= *= /= %= <<= >>= >>>= &= ^= |=

 

uvjet  

?:

 

logičko-ili  

||

 

logičko-i  

&&

 

bitwise-ili  

|

 

bitwise-xili  

^

 

bitwise-i  

&

 

jednakosti  

== != === !==

 

relacije  

< <= > >= in instanceof

 

bitwise pomak  

<< >> >>>

 

zbrajanje/oduzimanje  

+ -

 

množenje/dijeljenje  

* / %

 

negacija/uvećanje  

! ~ - + ++ -- typeof void delete

 

call / stvaranje instance  

() new

 

member  

. []

 

Tablica 3.7    prioritet operatora  


prethodna      sadržaj        slijedeća     

Copyright © 2000 Netscape Communications Corp. All rights reserved.

Posljednja izmjena Rujan 28, 2000