Bir JavaScript deÄiÅkeni her türlü veriyi tutabilir. Ãnce karakter dizisi (string) atansa da sonra sayısal deÄer alabilir:
// Hata yok
let mesaj = "merhaba";
mesaj = 123456;
Bu Åekilde olaylara izin veren tipteki dillere âdinamik tipâ dil denir. Veri yapıları olsa bile deÄiÅkenler bu yapılara baÄlı deÄildir.
JavaScript dilinde sekiz farklı veri tipi bulunmaktadır. Åimdilik bu tiplerden bahsedeceÄiz gelecek bölümlerde ise daha derinlemesine bu tipleri inceleyeceÄiz.
Number â Sayı
let s = 123;
s = 12.345;
sayı hem integer hem de floating point sayıları için kullanılır. Sayılar *, /, + veya - iÅlemlerine girebilirler.
Normal sayıların haricinde âözel sayısal deÄerlerâ de sayı olarak tanımlanabilir. Bunlar : Infinity, -Infinity ve NaN gibi deÄerlerdir.
-
Infinitymatematiksel SonsuzluÄu â ifade eder. DiÄer tüm sayılardan büyük olan özel bir sayıdır.0âa bölünmede sonuç sonsuzu verir:
alert( 1 / 0 ); // Infinityveya doÄrudan ekranda gösterebilirsiniz:
alert( Infinity ); // Infinity -
NaNhesaplamalarda bir hata olduÄunu gösterir. Hatalı veya tanımsız matematiksel hesapları gösterir, örneÄin:alert( "Sayı DeÄil ( Not a Number) " / 2 ); // NaN, böyle bir bölme iÅlemi yapılamaz.NaNyapıÅkandır.NaNüzerinde yapılacak herhangi bir iÅlem yenidenNaNçıktısı verecektir:alert( "not a number" / 2 + 5 ); // NaNÃyleyse matematiksel iÅlemlerin herhangi bir yerinde
NaNalınıyorsa bu hesabın tamamını etkiler.
JavaScript üzerinden matematik hesapları yapmak güvenlidir. Her iÅlemi yapabilirsiniz. 0âa bölme normal harf dizesini bir sayıya bölmeye çalıÅma vs.
Kodunuzun tamamı hiç durmadan çalıÅacaktır. En kötü ihtimalle NaN sonucunu alınır.
Ãzel sayısal deÄerler ânumberâ tipine aittir. Tabii ki sayı bizim bildiÄimiz tipte sayı deÄillerdir. Sayılar bölümünde sayısal deÄerler ile çalıÅmayı daha derinlemesine göreceksiniz.
BigInt â Büyük Sayı
JavaScriptâte ânumberâ türü, Åundan büyük tamsayı deÄerlerini temsil edemez (253-1) (bu 9007199254740991), veya daha az -(253-1) negatifler için. Dahili temsillerinden kaynaklanan teknik bir sınırlamadır.
ÃoÄu amaç için bu oldukça yeterlidir, ancak bazen gerçekten büyük sayılara ihtiyacımız olabilir, kriptografi veya mikrosaniye hassasiyetli zaman damgaları için.
Son zamanlarda, isteÄe baÄlı uzunluktaki tam sayıları temsil etmek için dile BigInt türü eklendi.
Bir tamsayının sonuna n eklenerek BigInt deÄeri oluÅturulur:
// Sondaki "n" bu deÄerin bir BigInt olduÄu anlamına gelir
const bigInt = 1234567890123456789012345678901234567890n;
BigInt sayılarına nadiren ihtiyaç duyulduÄundan, onları burada ele almıyoruz, ancak onlara ayrı bir bölüm "bigint" adresindeki makale bulunamadı ayırdık. Bu kadar büyük sayılara ihtiyacınız olduÄunda okuyun.
Åu anda, BigInt Firefox/Chrome/Edge/Safariâde destekleniyor, ancak IEâde desteklenmiyor.
Bir tarayıcının hangi sürümlerinin desteklendiÄini öÄrenmek için * MDN * BigInt uyumluluk tablosunu kontrol edebilirsiniz.
String â Karakter Dizisi
JavaScriptâte karakter dizileri çift tırnak içerisine alınmalıdır.
let str = "Merhaba";
let str2 = 'Tek tırnak da çalıÅır';
let phrase = `deÄer gömülebilir ${str}`;
JavaScriptâte 3 çeÅit tırnak içine alma yöntemi vardır.
- Ãift tırnak:
"Hello". - Tek tırnak:
'Hello'. - Ters tırnak:
`Hello`.
Ãift tırnak ile tek tırnak âbasitâ tırnaklardır. Aralarında bir farklılık yoktur.
Ters tırnak ise âgeniÅletilmiÅ fonksiyonluâ tırnaktır. Bunu kullanarak karakter dizisi içerisine ${...} gibi baÅka bir dizi yerleÅtirebiliriz. ÃrneÄin:
let isim = "Ahmet";
// deÄiÅken gömme
alert( `Hello, ${isim}!` ); // Merhaba Ahmet!
// ifade gömme
alert( `sonuç : ${1 + 2}` ); //sonuç : 3
${...} içerisinde yazılan ifade çalıÅtıÄında karakter dizisinin bir parçası olur. ${...} içerisine her Åeyi koyabiliriz: deÄiÅken ismi adi veya matematiksel ifade 1+2 gibi.
Lütfen unutmayın ki bunu sadece kesme tırnak â`â ile yapabilirsiniz.
alert( "sonuç ${1 + 2}" ); // örneÄin burada normal çift tırnak kullanıldıÄından ekrana "sonuç ${1+2}" diye çıktı verir.
Karakter dizileri konusunu Karakter Dizisi - Strings bölümünde daha derinlemesine incelenecektir.
Bazı dillerde âcharacterâ â Karakter adında sadece bir karakteri tutan veri tipleri mevcuttur. Bu tip Java ve Câde char olarak tanımlanır.
JavaScriptâte böyle bir tip bulunmamaktadır. Tek karakterli deÄiÅken de karakter dizisidir (string). Karakter dizisi bir veya birden fazla karakteri tutar.
Boolean (doÄru/yanlıÅ) tipi
Boolean tipi true ve false olmak üzere sadece iki deÄer tutabilir.
Genelde bu tip veriler doÄru â yanlıŠsorularını tutmak için kullanılır. true doÄru demek false ise yanlıŠdemektir.
ÃrneÄin:
let isimKontrolu = true; // İsim kontrolü yapıldı.
let yasKontrolu = false; // YaŠkontrolü yapılmadı.
Ayrıca karÅılaÅtırma sonuçları boolean verir.
let buyuk = 4 > 1;
alert( buyuk ); // true (cevap görüldüÄü gibi "doÄru" çıkacaktır.)
Boolean ve diÄer mantıksal iÅlemler Mantıksal Operatörler bölümünde daha derinlemesine incelenecektir.
ânullâ deÄeri
ânullâ deÄeri yukarıda tanımlanan hiçbir tipe dahil deÄildir.
Kendi baÅına null deÄerini tutar.
let yas = null;
JavaScriptâte null olmayan objeyi referans göstermez veya baÅka dillerdeki gibi ânull pointerâ deÄildir.
âolmayanâ, âboÅâ, âbilinmeyen deÄerâ anlamında bir özel deÄerdir.
Yukarıdaki yas boÅ veya bilinmeyen bir deÄerdir.
âundefinedâ deÄeri
Bir diÄer özel deÄer ise undefineddır. Kendi baÅına null gibi bir deÄerdir.
undefined anlam olarak âherhangi bir deÄer atanmamıÅtırâ anlamına gelir.
EÄer bir deÄiÅken tanımlanmıŠfakat hiçbir deÄer atanmamıÅsa tam olarak bu deÄeri alır.
let x;
alert(x); // "undefined" çıktısı verir.
Teknik olarak undefined deÄerini herhangi bir deÄiÅkene atamak mümkündür:
let x = 123;
x = undefined;
alert(x); // "undefined"
Fakat bu Åekilde tanımlanmasa daha iyi olur. Normalde null kullanılarak deÄiÅkenin boÅ veya bilinmeyen olduÄu tanımlanır, undefined deÄiÅkene bir deÄer atanmıŠmı? Sorusunu kontrol eder.
Objeler ve Semboller
Obje özel bir tiptir.
DiÄer tüm tipler âprimitiveâ yani basit veya ilkel tiplerdir. Bu deÄiÅkenler sadece bir Åey tutabilirler (karakter dizisi veya sayı). Buna karÅılık objeler veri koleksiyonları (collections) veya karmaÅık yapılar tutabilirler. Objeler konusunda Obje daha derinlemesine incelenecektir.
Symbol objeler için benzersiz tanımlayıcılar oluÅturmak için kullanılır. Bu konuyu objeleri öÄrendikten sonra öÄrenmek daha iyi olacaktır.
typeof Operatörü
typeof argüman tipini bildirir. Farklı tipler için farklı akıÅlarınız varsa bunu kullanabilirsiniz.
İki türlü yazımı vardır:
- Operatör olarak:
typeof x. - Fonksiyonel tipte:
typeof(x).
DiÄer bir deyiÅle parantezli de çalıÅır parantez olmadan da çalıÅır. Sonuç aynı olacaktır.
typeof xâi çalıÅtırdıÄınızda bu fonksiyon karakter dizisi (string) döndürür:
typeof undefined // "undefined"
typeof 0 // "number"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)
Son üç satır diÄerlerinden farklıdır. Åu Åekilde;
Mathmatematiksel operasyonlar için kullanılacak JavaScript dilinde var olan bir objedir. Sayılar konusunda buna deÄinilecektir. Burada sadece objenin örneklenmesi için kullanılmıÅtır.typeof nullsonucu"object"dir. Aslında yanlıÅ. Butypeoffonksiyonunun bilinen bir hatasıdır. Eski versiyonlara uygunluk açısından bu Åekliyle bırakılmıÅtır. Yoksanullbir obje deÄildir. Kendine has bir tiptir. Tekrar söylemek gerekirse bu JavaScript dilinin bir hatasıdır.typeof alertfonksiyondur. Ãünküalertdilde doÄrudan var olan bir fonksiyondur.Mathile farklı gördüÄünüz gibi. Bir sonraki bölümde fonksiyonlar anlatılacaktır. Fonksiyonlar obje tipine dahildir. Fakattypeofbunları farklı yorumlar. Resmi olarak yanlıŠolsa da pratikte çokça kullanılan bir özelliktir.
Ãzet
Javascript dilinde 8 tane basit tip bulunmaktadır.
numberher türlü sayı için (integer veya floating point)bigintisteÄe baÄlı uzunluktaki tam sayılar içindir.stringbir veya birden fazla karakter içinboolean,true/falseyani doÄru-yanlıŠdeÄerleri için.nullbilinmeyen deÄerler için.undefineddeÄer atanmamıŠdeÄiÅkenler için.objectdaha karmaÅık veri yapıları için.symboleÅsiz tanımlamalar için.
typeof operatörü deÄiÅkenin tipini verir.
- İki türlü kullanılabilir:
typeof xveyatypeof(x) - Geriye karakter dizisi olarak deÄiÅkenin tipini döndürür. ÃrneÄin:
"string" - İstisna olarak
nullkontrolünde"object"çıktısı verir. Fakat bu dile ait bir hatadır. Normaldenullobje deÄil, kendi baÅına bir tiptir.
Bir sonraki bölümde basit tiplere yoÄunlaÅılacaktır. Bu tipleri kullanmak alıÅkanlık haline geldiÄinde objelere geçilebilir.
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)