JavaScript ilkel tiplerin(karakter dizisi, sayılar vs.) karakter gibi kullanılmasına olanak verir.
Ayrıca bunların metodlarının çaÄırılabilmesini saÄlar. Az sonra da gösterileceÄi gibi, aslında bu ilkel tipler obje deÄillerdir. (İlerleyen zamanlarda bu daha açık bir Åekilde görülecektir.)
İlkel tipler ile objeler arasındaki farka bakılacak olursa:
İlkel tip:
- 7 tane ilkel tip vardır:
string,number,bigint,boolean,symbol,nullveundefined.
Obje:
- Birçok deÄeri özellikleri içerisinde saklayabilir.
{}Åeklinde, örneÄin{isim:"Kemal", yas:30}gibi. JavaScriptâte fonksiyonlar gibi baÅka türde de objeler bulunmaktadır.
Objeler için ön önemli özelliklerden birisi de fonksiyonları özellikleri içerisinde tutabilmeleridir:
let kemal = {
isim: "Kemal",
selamVer: function() {
alert("Selam Dostum!");
}
};
kemal.selamVer(); // Selam Dostum!
kemal isminde bir obje ve selamVer adında bir metod yukarıdaki gibi tanımlanabilir.
ÃoÄu var olan objeler, tarih, hatalar, HTML elementleri kendine has metodlara sahiptirler.
Tabi bu farklılıÄın bir maliyeti var!
Objeler ilkellere göre daha âaÄırdırlarâ. Daha fazla kaynak gerektirirler. Fakat özellikler ve metodlar çok önemli olduklarından JavaScript motoru bunları olabildiÄince optimize eder.
Obje olarak ilkel tipler
Burada JavaScriptâi oluÅturan kiÅiler ikilem ile karÅılaÅmıÅlardır:
- Karakter dizisi veya sayı gibi ilkel tipler ile birçok Åey yapılmak istenebilir. Bunlara metod eklenmesine izin vermek harika olur.
- İlkel tipler olabildiÄince hızlı olmalıdır.
Ãözüm biraz garip :
- İlkel tipler hala ilkel tip olarak kalacak. Tek bir deÄer istendiÄi gibi atanabilecek.
- Karakter dizisi, sayı, boolean ve sembollerin metodlarına izin verilecek.
- Bu yapıldıÄı yani bu metodlara eriÅilmeye çalıÅıldıÄında özel bir âobje kabıâ yaratılacak ve bunun içinde farklı fonksiyonalite eklenebilecek veya silinebilecek.
âObje Kaplarıâ(Object wrappers) her ilkel tip için farklıdır bunlar: String, Number, Boolean ve Symbol Åeklindedir. Hepsinin kendine has metodları vardır.
ÃrneÄin str.toUpperCase() bir stringdeki karakterlerin hepsini büyük harfe çevirir.
ÃalıÅması Åu Åekilde:
let str = "Merhaba";
alert( str.toUpperCase() ); // MERHABA
Basit deÄil mi? str.toUpperCase() çaÄırıldıÄında sırası ile aÅaÄıdakiler olmaktadır.
- Karakter dizisi
strilkel bir tiptir. Bundan dolayı özelliÄine eriÅilmek istendiÄinde aynı karakter dizisine sahip bir obje yaratılır. Bu objenintoUpperCase()gibi kullanıÅlı metodları bulunmaktadır. - Bu metod yeni bir karakter dizisi döndürür ve bu
alertiçinde gösterilir. - Ãzel yaratılan obje imha edilir,
streski ilkel haline döner.
Yani ilkel tipler metodları saÄlamıŠolur fakat yine de âhafifâ bir Åekilde varlıÄını sürdürür.
JavaScript motoru bu iÅlemleri en uygun hale getirmektedir. Belki ekstra bir objenin yaratılmasını tamamen pas geçebilir. Fakat yine de sanki yaratılmıŠgibi davranması gerekmektedir.
Sayılar da kendine has metodlara sahiptir. ÃrneÄin toFixed(n) sayıyı yuvarlamaya yarar:
let n = 1.23456;
alert( n.toFixed(2) ); // 1.23
Sayılar ve Karakter Dizisi - Strings bölümlerinde daha fazla metod iÅlenecektirâ¦
String/Number/Boolean gibi yapıcılar sadece içte kullanım içindirJava gibi bazı diller bu obje kapsayıcıları doÄrudan tanımlamanıza izin verir. ÃrneÄin new Number(1) veya new Boolean(false) gibi
JavaScriptâte de bu eskiden kalma özelliklerden dolayı mümkündür, fakat önerilmez. Bir örnek verilecek olursa:
alert( typeof 1 ); // "number"
alert( typeof new Number(1) ); // "object"!
sifir karÅılaÅtırmalarında sorunla yaratabilir:
let sifir = new Number(0);
if (sifir) { // burada sıfır true gelecek çünkü o bir obje
alert( "Sıfır doÄru mu??? );
}
DiÄer bir yandan new olmadan String/Number/Boolean kullanılması ise tamamen mantıklıdır. DeÄeri belirtilen ilkel tipe çevirmeye yarar.
ÃrneÄin:
let num = Number("123"); // karakteri sayıya çevir.
null ve undifinedâın âobje kabıâ yoktur. Bundan dolayı metodları bulunmaz. Böyle baklıdıÄında bunlara âen ilkel tipâ denebilir.
Böyle bir deÄiÅkenin özelliÄine eriÅmeye çalıÅmak hata dödürür:
alert(null.test); // hata
Ãzet
nullveundefinedharicindeki ilkel tipler iÅe yarar metodların kullanılmasına izin verir.- Åeklen, bu metodlar geçici objelerle çalıÅır, fakat JavaScript motorları çok etkin bir Åekilde çalıÅtıklarından bu çaÄrılar masraflı deÄildir.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)