Javascript için değişkenlerin önemi yoktur. Gerek oldukça değiştirilebilirler. Bunun anlamı bir anda değişken yazı dizisi saklıyorsa, diğer anda tam sayı içerebilir. Temel değişken tipleri şunlardır:
character
'a' ya da '@' ya da 'k' vb.
string
'hdttgs 8 -46hs () Düşünceyi anlayın'
integer
0 ya da 1 ya da 2 ya da 3 ya da 4 vb. ya da -1 ya da -2 ya da -3 ya da -4 vb.
float (or double)
23.546 ya da -10.46
boolean
doğru (true) ya da yanlış (false)
function
Bir işlev (function) işlevler bölümüne bakmayı unutmayın
object
Bir nesne (object); Nesnel programlama bölümüne bakın
array
Değişkenleri hücrelerde saklayabilen bir tür nesnedir
undefined
Henüz bir değeri olmayan değişken
null
Tanımlanmış ama null değeri atanmış bir değişken
Tamsayılar ve kayan noktalılar 'number' (sayı) olarak sınıflandırılmıştır. Karakter ve yazı dizisi 'string' (yazı dizisi) olarak adlandırılır.
Bir değişkenin hangi tür olduğunu bulan 'typeof' işlemi. Not: 'typeof' diziler ve 'null' için 'object' (nesne) değeri döndürür.
Değişkenleri tanımlama
Erişim adı bölüme ve erişim çelişkileri adlı alt bölüme bakınız.
Normal Değişkenler
Kullanılan değişkenleri önceden "var" anahtar kelimesiyle tanımlamak güzel bir alışkanlıktır. Bir değişkeni tanımlamak ve değerini tanımlamamak ya da hemen bir değer atamak ya da birden çok değişkeni tek satırda tanımlamak olanağı vardır:
javascript oldukça hoşgörülüdür. Eğer değişkenlerinizi 'var' anahtar kelimesiyle tanımlamamışsanız, kendisi evrensel değişkenler yaratır. Eğer tanımlanmamış bir değişkene değer atarsanız bu işlem doğrudur ama içinde bir değer varmış gibi okunmaya kalkılırsa hata mesajı ortaya çıkar. Ayrıca bu bir başka soruna da neden olabilir. Kazayla başka ortamlardaki değişkenin değerini ezmek bile söz konusu olabilir.
Bir kez değişken tanımlandı mı 'var degisken_adi' biçimini bir daha kullanmayın (eğer o değişkeni tümüyle ezmek istiyorsanız kullanabilirsiniz). Aynı ortamda "var" anahtar kelimesiyle aynı değişkeni birden çok tanımlamaya gerek yoktur. Ama tarayıcı sorun çıkartmaz, yapsanız da kabul eder.
Aşağıdakiler değişkenleri tanımlamak için kullanılan örneklerdir. Burada bir yazı dizisi, bir sayı ve bir deyim tanımlanmıştır:
Bir değişkenin çocuklarının özellikleri olması gerekiyorsa bu değişkeni bir nesne olarak tanımlamak gerekir. Bir değişkeni nesne olarak tanımlamak için ya
new Object() ya da {} yazım kuralını kullanın:
İstediğiniz nesnelere çocuk nesneler ya da özellikler atayabilirsiniz.
Yeni yarattığınız bir nesne üzerinde bir yöntem çalıştırmak isterseniz, gerçek Javascript 1.2 ortamında nesneyi kıvrımlı parantezler arasına almanız gerekir (ilk Netscape 4'lerde sorun çıkar). Bu tanım NN 4 zamanındaki tarayıcılarda da çalışmaz.
new Date().getTime()
Bu örnek Javascript destekleyen tüm tarayıcılarda çalışır:
( new Date() ).getTime()
Bu tanım tüm nesnelere (Array, Image, Option, Object, Date ve sizin yarattıklarınız) uyar.
Diziler
WebTV 2.6- Dizi yaratırken [] dil kuralını desteklemez.
Diziler, yukarıda tanımlanan nesnelere benzer. Ama birkaç küçük ayrıntıda farklılık gösterir. Bir dizi kutu gibi düşünülse, içinde bölümler vardır ve sayılarını değiştirme olanağı bulunur. Her bölümün içeriğine erişmek için kutunun adını, köşeli parentezler içine de bölümün adı ya da sıra numarası yazılır. Bir dizi yaratırken new Array() ya da [] dil kuralı kullanılır:
Dizi nesneleri yaratırken bir sayı parametre olarak kullanılabilir. Eğer sayı pozitif bir sayıysa, dizi belirtilen sayıda hücreyle yaratılır. Hücrelerin hepsi boştur.
new Array(5)
Eğer dil niteliğini Javascript 1.2 yazarsanız, bu tanımla bazı tarayıcılar (hepsi değil) bir hücreli bir dizi yaratır ve ilk değeri 5 olur.
Bir dizinin hücrelerinin içeriğine erişmek için "dizi_adi[hücre_sıra_no ya da hücre_adi] (sıra no yerine ad kullanıyorsanız ad tırnak içinde yazılmalıdır). Sayısal hücre tanımları sıfırdan başlar, bazı programlama dillerindeki gibi birden değil.
Javascript için dizi ve nesne hemen hemen aynı şeydir ve dizinin adlandırılmış bir hücresine erişim, bir nesnenin özelliğine erişimle aynıdır. Eğer bir dizinin hücresi "mycell" diye adlandırılırsa, aşağıdakilerden birini kullanarak içeriğine erişebilirsiniz:
nameOfArray['mycell']
nameOfArray.mycell
Dizilerle nesneler arasında önemli bir fark vardır. Varsayılan olarak dizilere birçok yöntem eklenmiştir. Dizi içinde gezinmekte kullanılan ya da diziyi parçalara ayıran yöntemler gibi. Buna ek olarak eğer sayılar kullanılırsa, dizide kaç tane hücre olduğu dizi_adi.length kullanılarak öğrenilebilir.
Çok boyutlu diziler üretilebilir. Bir dizi öğesi bir başka dizi olarak tanımlanırsa çok boyutlu dizi tanımı yapılmış olur. Örneğin:
var nameOfArray = new Array(new Array(1,2,3,4),'hello',['a','b','c']);
Bu tür dizi hücrelerine erişim köşeli parantezleri iki kez kullanılarak sağlanılır (ya da boyut sayısına bağımlı olarak çok kez):
Tarayıcıların birçok hazır nesnesi vardır. Tüm Javascript yetenekli tarayıcılar aşağıdaki nesneleri destekler:
Date
Tarih nesnesini yaratır. Tarih üzerine işlem yapılmasını sağlar. Örneğin:
var mydate = new Date();
window.alert( 'The year is' + mydate.getFullYear() );
Image
Görünmeyen ama bellekte saklanan bir resim yaratır. "src" niteliğine atama yaparak tarayıcı belleğine yükleme yapılması sağlanır:
var myimage = new Image();
myimage.src = 'thing.gif';
Sayfadaki resmin değiştirilmesi istendiğinde, document['resimadi'].src = myimage.src; yazılarak resmin değişmesi sağlanır. Resim daha önce yüklenmiş olduğundan resmin değişmesi hemen olur.
Option
Seçimli giriş alanı için yeni bir seçenek eklenmesini sağlar. Örneğin:
var myoption = new Option('text','value');
selectInput.options[selectInput.options.length] = myoption;
Nesnelerin yaratılması bölümüne bakarak kendi nesnelerinizi nasıl yaratacağınızı öğrenebilirsiniz. DOM destekleyen tarayıcılar, daha çok nesne türleri sunarlar.
Özellikleri Silme
Bu sayfada nesneler için değişik zamanlarda özellikler yaratılmıştır.
Yaratılanlar "undefined" (tanımsız) ya da "null" (boş) olsalar bile var oldukları için yer alırlar. Bunların hepsi "delete" anahtar sözcüğüyle silinebilir.
delete myObject.itsProperty;
Ciddi bilgisayar belleği sorunu yoksa ya da güvenlik riskleri oluşmuyorsa, bu işlemi yapmanın genelde gereği yoktur. Javascript yorumlayıcılar hiç kullanılmayan değişkenleri temizlerler.
Değişkenlerle hataları giderme
Herhangi bir anda, olmayan bir değişkene erişmek isterseniz hemen hata alırsınız. Ama Javascript nesnelerin ilk düzey çocukları olmasalar bile, erişmenize izin verir. Bu öğrenilmesi gereken çok önemli bir kuraldır ve tarayıcılara bağımlı olmadan çalışabilen kodlar yazılmasını sağlar. Aşağıdaki örnekler nelerin hataya dönüştüğünü gösterir:
var myObject = new Object(), nonObject = '', nonObject2;
Aşağıdaki örnek için atamalar yapılmıştır. Buraya değin herşey normaldir. Aşağıdaki kodda b tanımlanmamış olduğu için hata verir:
var a = b + 5;
Aşağıdaki örnekte üst düzey nesne tanımlı ama çocuğu tanımlı değildir. Bu tek düzey tanımsız özellik olduğundan hata vermez ve kabul edilir.
var b = myObject.myChild;
Aşağıdaki örnekte üst düzey nesne tanımlıdır ama özelliği tanımlanmamıştır. Tanımlanmamış özelliğin çocuğuna erişmeye kalkmak iki düzeyli tanımsızlığı kullanmak olduğundan hata oluşmasına neden olur:
b = myObject.myChild.itsChild;
Aşağıdaki örnekte üst düzey nesne tanımlıdır. Ama bu değişken çocuk özelliklerini kabul edemez. Buraya çocuk eklemeye çalışmak hata oluşturmaz, çünkü tanımsızlığın ilk düzeyidir. Ama hiçbir şey yapmaz çünkü özellik red edilmiştir.
nonObject.itsChild = 7;
window.alert(nonObject.itsChild);
//Bunun sonucunda 'undefined' görüntülenir
Aşağıdaki örnekte, üst düzey nesne tanımlıdır ama ona değer verilmemiştir. Sonuç olarak değeri "undefined" olur. Çoçuk özelliklere erişmeye kalkmak ikinci düzey tanımsızlığa yol açacağından hata oluşturur:
nonObject2.itsChild = 7;
Bir değişkene erişim ya da değerini alma
Bir değişkeni diğerine atadığınızda, bazı koşullarda birinin değerinin diğerine yapıştırıldığı durumlar vardır. Ama bazı koşullarda değişkenin değeri yerine bu değişken için yeni bir erişim yöntemi oluşturulmuş olunur. Örneğin:
var myNewVariable = myOldVariable;
Eğer myoldVariable bir yazı, sayı, mantıksal değer, null ya da undefined olarak tanımlanmışsa, burada içeriği kopyalanır ve mynewVariable değişkenine taşınmış olur. Eğer yeni değişkenin değeri değişirse (mynewVariable='bir başka değer';) myoldVariable eskisi gibi kalır.
Diğer taraftan eğer myoldVariable daha önce bir işlev, dizi, nesne ya da seçenek olarak tanımlanmışsa, mynewVariable myoldVariable değişkeninı gösterge olarak yaratır. myoldVariable çocukları mynewVariable çocukları olur. Eğer yeni değişkenlerin değeri değişirse (örneğin mynewVariable = 'bir değer'; gibi), bu yalnız mynewVariable değerini etkiler. Artık myoldVariable göstergesi değildir. Ama mynewVariable özelliklerini değiştirmek, gösterdiği değişkenin özelliklerini değiştirmekle aynı şeydir.
var myOldVariable = new Object();
var myNewVariable = myOldVariable;
myNewVariable.newChild = 'Hello';
alert(myOldVariable.newChild);
//Burada 'Hello' görüntülenir
Sayılar Üzerine
Javascript birçok kalıptaki sayıları anlar. Böylece sayıları hex, ondalık ve sekizlik tanımlamak olanağı vardır. Eğer bir sayının solunda 0 varsa ve içinde yediden büyük sayı yoksa bu değer sekizli sayı anlamına gelir. Eğer sayının önünde 0x varsa sayı hex kabul edilir (o zaman A B C D E F) değerleri de tanımlanabilir. Bunların hiç birinde kayan nokta olmaz.
Ondalık sayılarda 12e+4, 12x10 üzeri 4 yerine ve 12e-4, 12x10 üzeri -4 yerine kullanılabilir.
Bir kaç değişik sayı gösterilimi daha vardır. Bunlarla Math nesnesi içinde karşılaşılır. Bunlar değişken gibi kullanılabilir ama değer ataması yapılamaz.
Var olan Math nesnesi değişmezleri:
Math nesnesi değişmezleri
Math nesne özelliği
Değer (yaklaşık)
Matematiksel karşılığı
Math.E
2.718
e
Math.LN2
0.693
ln(2)
Math.LN10
2.303
ln(10)
Math.LOG2E
1.442
log2(e)
Math.LOG10E
0.434
log10(e)
Math.PI
3.142
Pi
Math.SQRT1_2
0.707
(sqrt(2))-1 or sqrt(1/2)
Math.SQRT2
1.414
sqrt(2)
Özel yazı dizisi karakterleri
Birkaç tane özel karakter vardır. Ters kesmeyle kullanılır ve görünmeyen karakterleri belirtirler:
\n
Yeni satır karakteri. Yazının içinde yeni satır gerektiğinde kullanılır.
\f
Bunu hiç kullanmamaya çalışın her zaman yerine \n kullanın.
\r
Taşıyıcı geriye. Hiç kullanmamaya çalışın yerine \n kullanın.
\t
Tab karakteri.
\\
\ karakteri
\/
/ karakter (birçok web tasarımcısı bunu unutur. Tarayıcıların unuttulan ters kesme konusunda bir sorunları olmaz
Tarayıcılara biçimin kapandığını belirtmek için kullanılır ve teoride düz kesmeyi her zaman ters kesmeyle birlikte kullanılması gerekir.
Eğer windows satır kırılmasını aramak isterseniz \r\n aramalısınız. Eğer satır kırılımı eklemek isterseniz (örneğin textarea giriş alanını değiştirecekseniz) araya \n eklemelisiniz. Bu yöntem tarayıcılar arasında da çalışır. Windows üzerindeki tarayıcılar \n değerini gerek olduğunda \r\n biçimine çevirir.
Eski Mac işletim sistemi (OS 9 ve aşağısı) satır kırılımları için \r kullanır. Ama Javascript bunları \n değerine çevirmektedir. Özellikle bilgi girişlerinde yazı dizileri içinde karşılaşabilirsiniz.
Eğer bir yazı dizisi kullanıyorsanız ve içinde çift tırnak varsa bunu çözmenin en basit yolu dışta kullanılan tırnakları tek tırnak olarak belirlemektir. Tersi de geçerlidir: Eğer yazı dizisi içinde tek tırnak varsa çift tırnağı dışta kullanmalısınız.
var mystring = 'And he said "help" twice';
var mystring = "Help Andy's cat";
Burada bir sorun var. Eğer yazı dizisinde hem tek hem de çift tırnak kullanılıyorsa ne yapılmalıdır? Çözüm '\' kullanarak tırnağın niteliğini değiştirmektir. Örneğin:
var mystring = 'And he said "help Andy\'s cat" twice';
var mystring = "And he said \"help Andy's cat\" twice";
Eğer yazı dizisi çok uzun olup bir satıra sığmazsa (bu çok önemli değildir siz yazıyı istediğiniz kadar uzun yapabilirsiniz), onu birkaç satıra bölersiniz. basit olarak yazı dizisini tırnakla kapatın ve sonra ekleme işlemiyle (+ işareti) yazı dizisinin kalanlarını yazın.
var mystring = 'first line of the string ' +
'still on the first line of the string - it\'s like we never' +
'broke the line';
Teorik olarak bir yazı dizisini parçalarken \ da kullanabilirsiniz.
var mystring = 'like \
this';
Bu aslında çok sorun çıkarabilir. \ her zaman bir boşlukla kullanılmalıdır. Satır sonuna gelen boşluk yorumlanamayabilir.
Netscape 4 (JavaScript kodunu bulanlar), Escape, Opera ve ICEbrowser satır kırılımlarını yazı dizisi içinde ister.
Internet Explorer, Mozilla/FireFox, iCab ve OmniWeb satır kırılım karakterini yok sayar.
ICEbrowser yazı dizisini bazen tümüyle siler
Bunları kullanmak yerine her zaman daha kolay olan birleştirme işlemini kullanmakta yarar vardır.
Kurallı Deyim (Regular expression)
Opera 4-6 hatalıdır. En basit deyimi bile çözememektedir
Cep Internet Explorer, Windows CE için Internet Explorer ve iCab 2- düzgün desteklememektedir
Bazı yöntemler stringObject.replace() ve stringObject.match() gibileri yazı içinde verilen deseni bulabilmektedir. Bunu kullanabilmek için kurallı deyim (regular expression) yazılmalıdır.
Temelde yapılacak olan özel karakterler kullanarak desen (patern) oluşturmaktır. Bu tür karakter toplamına kurallı deyim (regular expression) denir. Örneğin:
/\/\*[\w\W]*\*\//
yazıdaki blok açıklamaları bulur.
Ender kullanılan tarayıcıların bazıları kurallı deyim (regular expression) desteklemez. Teorik olarak aşağıdakini yazdığınızda tarayıcının kurallı deyim destekleyip desteklemediği anlaşılır:
if( window.RegExp ) { var myRegularExpression = new RegExp("pattern"); }
Bu windows CE için IE'de ve Cep IE'de hata oluşturmaz. Ama Opera 6- ve iCab 2- RegExp destekler ama doğru kullanamaz. Bu nedenle kodlamanız çalışmayacaktır. Yeni Opera ve iCab sürümlerinde RegExp doğru çalışmaktadır.