JavaScript ilkel tiplerin(karakter dizisi, saylar vs.) karakter gibi kullanlmasna olanak verir.
Ayrca bunlarn metodlarnn arlabilmesini salar. Az sonra da gsterilecei gibi, aslnda bu ilkel tipler obje deillerdir. (lerleyen zamanlarda bu daha ak bir ekilde grlecektir.)
lkel tipler ile objeler arasndaki farka baklacak olursa:
lkel tip:
- 7 tane ilkel tip vardr:
string,number,bigint,boolean,symbol,nullveundefined.
Obje:
- Birok deeri zellikleri ierisinde saklayabilir.
{}eklinde, rnein{isim:"Kemal", yas:30}gibi. JavaScriptte fonksiyonlar gibi baka trde de objeler bulunmaktadr.
Objeler iin n nemli zelliklerden birisi de fonksiyonlar zellikleri ierisinde tutabilmeleridir:
let kemal = {
isim: "Kemal",
selamVer: function() {
alert("Selam Dostum!");
}
};
kemal.selamVer(); // Selam Dostum!
kemal isminde bir obje ve selamVer adnda bir metod yukardaki gibi tanmlanabilir.
ou var olan objeler, tarih, hatalar, HTML elementleri kendine has metodlara sahiptirler.
Tabi bu farklln bir maliyeti var!
Objeler ilkellere gre daha ardrlar. Daha fazla kaynak gerektirirler. Fakat zellikler ve metodlar ok nemli olduklarndan JavaScript motoru bunlar olabildiince optimize eder.
Obje olarak ilkel tipler
Burada JavaScripti oluturan kiiler ikilem ile karlamlardr:
- Karakter dizisi veya say gibi ilkel tipler ile birok ey yaplmak istenebilir. Bunlara metod eklenmesine izin vermek harika olur.
- lkel tipler olabildiince hzl olmaldr.
zm biraz garip :
- lkel tipler hala ilkel tip olarak kalacak. Tek bir deer istendii gibi atanabilecek.
- Karakter dizisi, say, boolean ve sembollerin metodlarna izin verilecek.
- Bu yapld yani bu metodlara eriilmeye alldnda zel bir obje kab yaratlacak ve bunun iinde farkl fonksiyonalite eklenebilecek veya silinebilecek.
Obje Kaplar(Object wrappers) her ilkel tip iin farkldr bunlar: String, Number, Boolean ve Symbol eklindedir. Hepsinin kendine has metodlar vardr.
rnein str.toUpperCase() bir stringdeki karakterlerin hepsini byk harfe evirir.
almas u ekilde:
let str = "Merhaba";
alert( str.toUpperCase() ); // MERHABA
Basit deil mi? str.toUpperCase() arldnda sras ile aadakiler olmaktadr.
- Karakter dizisi
strilkel bir tiptir. Bundan dolay zelliine eriilmek istendiinde ayn karakter dizisine sahip bir obje yaratlr. Bu objenintoUpperCase()gibi kullanl metodlar bulunmaktadr. - Bu metod yeni bir karakter dizisi dndrr ve bu
alertiinde gsterilir. - zel yaratlan obje imha edilir,
streski ilkel haline dner.
Yani ilkel tipler metodlar salam olur fakat yine de hafif bir ekilde varln srdrr.
JavaScript motoru bu ilemleri en uygun hale getirmektedir. Belki ekstra bir objenin yaratlmasn tamamen pas geebilir. Fakat yine de sanki yaratlm gibi davranmas gerekmektedir.
Saylar da kendine has metodlara sahiptir. rnein toFixed(n) sayy yuvarlamaya yarar:
let n = 1.23456;
alert( n.toFixed(2) ); // 1.23
Saylar ve Karakter Dizisi - Strings blmlerinde daha fazla metod ilenecektir
String/Number/Boolean gibi yapclar sadece ite kullanm iindirJava gibi baz diller bu obje kapsayclar dorudan tanmlamanza izin verir. rnein new Number(1) veya new Boolean(false) gibi
JavaScriptte de bu eskiden kalma zelliklerden dolay mmkndr, fakat nerilmez. Bir rnek verilecek olursa:
alert( typeof 1 ); // "number"
alert( typeof new Number(1) ); // "object"!
sifir karlatrmalarnda sorunla yaratabilir:
let sifir = new Number(0);
if (sifir) { // burada sfr true gelecek nk o bir obje
alert( "Sfr doru mu??? );
}
Dier bir yandan new olmadan String/Number/Boolean kullanlmas ise tamamen mantkldr. Deeri belirtilen ilkel tipe evirmeye yarar.
rnein:
let num = Number("123"); // karakteri sayya evir.
null ve undifinedn obje kab yoktur. Bundan dolay metodlar bulunmaz. Byle bakldnda bunlara en ilkel tip denebilir.
Byle bir deikenin zelliine erimeye almak hata ddrr:
alert(null.test); // hata
zet
nullveundefinedharicindeki ilkel tipler ie yarar metodlarn kullanlmasna izin verir.- eklen, bu metodlar geici objelerle alr, fakat JavaScript motorlar ok etkin bir ekilde altklarndan bu arlar masrafl deildir.
Yorumlar
<code>kullannz, birka satr eklemek iin ise<pre>kullann. Eer 10 satrdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)