| 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.
Izrazi
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:
Arithmetički: daje brojevni rezultat, npr. 3.14159
String: daje string rezultat, npr. "Fred" or "234"
Operatori
JavaScript ima slijedeće vrste operatora.
Operatori pridruživanja JavaScript ima i binary i unary operatore. Binary operator treba dva operanda, jedan ispred i jedan iza operatora: Unary operator treba samo jedan operand, ili ispred ili iza operatora:
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
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
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'
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"
3 === var1
var1 !== "3"
3 !== '3'
var2 > var1
var2 >= var1
var1 >= 3
var1 < var2
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 JaviJavaScript arithmetički operatori prikazani su u slijedećoj tabeli.
Tablica 3.3 arithmetički operatori
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
Bitwise logički operatori
U osnovi bitwise logički operatori rade prema slijedećem:
Operandi se pretvaraju u 32-bitne integere i izrašavaju se nizom bita (nule i jedinice).
Svaki bit prvog operanda je uparen s odgovarajućim bitom drugog operanda: prvi bit s prvim bitom, drugi s drugim itd.
Operator tada djeluje na takve uparene bite iz čega proistječe određeni rezultat. 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
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
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 daje false
a2=true && false // t && f
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:
false && nešto je kratkospojno procjenjeno na false. 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
Uvjetni operator je jedini JavaScript operator koji ima tri operanda. Operator može poprimiti jednu od dvije vrijednosti na osnovu zadanog uvjeta. Sintaksa je:
Ako je uvjet true, operator ima vrijednost val1. U protivnom poprima vrijednost val2. Možete koristiti uvjetni operator uvijek kad koristite standardni operator.
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 izrazugdje 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:
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 operator a
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 ,
= += -= *= /= %= <<= >>= >>>= &= ^= |=
?:
||
&&
|
^
&
== != === !==
< <= > >= in instanceof
<< >> >>>
+ -
* / %
! ~ - + ++ -- typeof void delete
() new
. []
Tablica 3.7 prioritet operatora
prethodna sadržaj slijedeća
Copyright © 2000 Netscape Communications Corp. All rights reserved.
Posljednja izmjena Rujan 28, 2000