---
title: 'İlkel Tipler'
source: 'https://academia.sh/tr/kurslar/javascript-temelleri/ilkel-tipler'
course: 'JavaScript Temelleri'
language: tr
updated: '2026-08-17T18:09:49+00:00'
license: 'CC BY-SA 4.0'
---

# İlkel Tipler

Yedi ilkel tip ve nesne ayrımı; tek sayı tipinin kayan noktalı gösterimi, özel sayı değerleri, dizgi, mantıksal değer, iki yokluk değeri ve sembol.

Önceki konu adların nasıl bildirildiğini ve çözümlendiğini kurdu. Bu konu, adların
bağlandığı değerleri ele alıyor. Programlama Temelleri kursundaki Temel Veri Tipleri
dersinde tip, "değer kümesi ve o değerler üzerinde tanımlı işlemler" olarak tanımlanmıştı.
Bu ders o tanımı JavaScript'in değer modeline uygular.

Model küçüktür: yedi ilkel tip ve bir nesne sınıfı. Küçüklüğün bedeli, her tipin
taşıdığı kararların ağırlığıdır. Örneğin tek bir sayı tipi vardır ve tam sayılar için
ayrı bir tip yoktur; bu tek karar, ilerideki birkaç dersin konusunu belirler.

## Yedi İlkel Tip ve Nesneler

Bir değer ya **ilkeldir** ya da bir **nesnedir**. İlkel değerlerin içeriği
değiştirilemez ve kendi başlarına özellik taşımazlar. Nesneler ise özellik kümesidir ve
içerikleri değiştirilebilir.

`typeof` işleci bir değerin tipini metin olarak verir:

```js
console.log(typeof 21.5);
console.log(typeof "A1");
console.log(typeof true);
console.log(typeof undefined);
console.log(typeof null);
console.log(typeof 9007199254740993n);
console.log(typeof Symbol("olcum"));
console.log(typeof { istasyon: "A1" });
console.log(typeof [1, 2]);
console.log(typeof function () {});
```

```
number
string
boolean
undefined
object
bigint
symbol
object
object
function
```

Çıktı iki noktada tipe birebir karşılık gelmez. Beşinci satırda `null` bir ilkel
değerdir, ama sonuç `object`'tir; Dil Sürümleri ve Standartlaşma dersinde anlatılan
geriye dönük uyumluluğun izidir. Son satırda `function` ayrı bir tip değildir;
fonksiyonlar çağrılabilir nesnelerdir ve `typeof` bunu ayrı bir değerle bildirir.

Yedi ilkel tip şunlardır: sayı, büyük tam sayı, dizgi, mantıksal değer, `undefined`,
`null` ve sembol. Bu dersin konusu bunlardan altısıdır; büyük tam sayı bir sonraki
dersin konusudur.

## Sayı: Tek Bir Tip

JavaScript'te tam sayı ve gerçel sayı için ayrı tipler yoktur. `number` tipinin
tamamı, Bilgisayarlar Nasıl Çalışır kursundaki Kayan Noktalı Sayılar dersinde tanımlanan
IEEE 754 çift duyarlıklı gösterimdir: 64 bit, 1 bit işaret, 11 bit kaydırmalı üs, 52 bit
saklanan mantis.

Bu, iki doğrudan sonuç doğurur.

Birincisi, tam sayı yazımı ayrı bir tip üretmez:

```js
console.log(Number.isInteger(23));
console.log(23 === 23.0);
```

```
true
true
```

`23` ile `23.0` aynı değerdir; ikisi de aynı bit örüntüsüne karşılık gelir. Bu yüzden
ilk derste `Math.max` sonucu `23` olarak yazılmıştı — kesir kısmı sıfır olan bir kayan
noktalı sayı, metne çevrilirken kesir gösterilmeden yazılır.

İkincisi, ikilik kesir olarak yazılamayan onluk değerler yaklaşık tutulur:

```js
console.log(0.1 + 0.2);
console.log(0.1 + 0.2 === 0.3);
```

```
0.30000000000000004
false
```

Bu sonuç bir sürpriz değil, gösterimin doğrudan sonucudur. Kayan Noktalı Sayılar
dersindeki model burada birebir geçerlidir: $0{,}1$ ve $0{,}2$ değerleri ikilik kesir
olarak sonlu yazılamaz, en yakın temsil edilebilir değere yuvarlanır ve toplama bu
yuvarlanmış değerler üzerinde yapılır. Sonuç, $0{,}3$'ün temsiline değil, ona en yakın
başka bir değere düşer.

Aynı derste kurulan pratik kural burada da geçerlidir: kayan noktalı değerler eşitlikle
değil, tolerans ile karşılaştırılır. Para gibi kesinlik gerektiren büyüklükler ise en
küçük birimi taşıyan tam sayılarla tutulur.

Tam sayıların güvenli aralığı da mantis genişliğinden gelir. Mantis 53 bit duyarlık
sağladığı için, mutlak değeri $2^{53}-1$ değerini aşan tam sayılar birbirinden ayırt
edilemez:

```js
console.log(Number.MAX_SAFE_INTEGER);
console.log(9007199254740992 === 9007199254740993);
```

```
9007199254740991
true
```

İki farklı tam sayının eşit çıkması, ikisinin de aynı temsil edilebilir değere
yuvarlanmasındandır. Bu sınırın aşıldığı durumlar bir sonraki dersin konusudur.

## Özel Sayı Değerleri

Gösterim üç özel değer taşır ve üçü de dilde doğrudan görünür:

```js
console.log(1 / 0, -1 / 0, 0 / 0);
console.log(Object.is(0, -0), 1 / -0);
```

```
Infinity -Infinity NaN
false -Infinity
```

Sıfıra bölme hata vermez; sonsuzluk değeri üretir. Tanımsız işlemler `NaN` (not a
number) verir. `NaN` bir sayı **değeri**dir ve tipi `number`'dır; adı, temsil edilen
şeyin bir sayı olmadığını söyler.

İşaretli sıfır da gösterimin parçasıdır: `0` ile `-0` farklı bit örüntüleridir ama
eşitlik karşılaştırmalarında eşit sayılırlar. Ayrımı gören işlem `Object.is`'tir. `-0`
değeri çoğu hesapta görünmez; yalnızca sıfıra bölmede işareti belirlediği için önem
kazanır.

## Dizgi

Dizgi tipi, metin taşır. Dizgiler tek tırnak, çift tırnak veya ters tırnak ile yazılır;
ilk ikisi arasında davranış farkı yoktur. Ters tırnaklı biçim ayrı yeteneklere sahiptir
ve Dizgiler dersinde ele alınacaktır.

```js
const ad = "ölçüm";
console.log(ad.length);
console.log(ad[0]);
console.log(ad.toUpperCase());
console.log("A1".codePointAt(0));
```

```
5
ö
ÖLÇÜM
65
```

Dizgi uzunluğu karakter sayısı değil, **16 bitlik kod birimi** sayısıdır. Bilgisayarlar
Nasıl Çalışır kursundaki Karakter Kodlamaları dersinde tanımlanan vekil çift kavramı
burada görünür hale gelir: temel çok dilli düzlemin dışındaki bir kod noktası iki kod
birimiyle temsil edilir ve `length` bunu iki sayar.

```js
console.log("😀".length);
```

```
2
```

Bu, dizgi tipini anlamanın anahtarıdır: dizgi bir kod noktası dizisi değil, kod birimi
dizisidir. Ayrım, karakter sayma ve dilimleme işlemlerinde sonuç değiştirir.

## Mantıksal Değer

Mantıksal tipin iki değeri vardır: `true` ve `false`. Karşılaştırmalardan üretilirler ve
koşullu yapıların girdisidir. JavaScript, mantıksal olmayan değerleri de koşulda
kullanılabilir sayar; hangi değerin doğru, hangisinin yanlış sayıldığı Doğruluk Değerleri
dersinin konusudur.

## İki Yokluk Değeri

Çoğu dilde tek bir yokluk değeri bulunur. JavaScript'te iki tane vardır ve anlamları
ayrıdır.

`undefined`, **bir değerin hiç verilmemiş olmasıdır**. Bildirilmiş ama atanmamış bir
değişken, var olmayan bir nesne özelliği ve karşılığı verilmemiş bir parametre bu değeri
taşır. Dil onu kendiliğinden üretir.

`null`, **bilinçli olarak yerleştirilmiş bir yokluktur**. Dil onu kendiliğinden üretmez;
program yazarı "burada değer yok" demek için atar.

```js
const kayit = { istasyon: "A1", sicaklik: 21.5 };
console.log(kayit.nem);
console.log("nem" in kayit);

let sonrakiOkuma;
console.log(sonrakiOkuma);

const kalibrasyon = null;
console.log(kalibrasyon);
```

```
undefined
false
undefined
null
```

Ayrım ölçüm verilerinde doğrudan işe yarar. Bir kayıtta nem alanı **hiç yoksa** okuma
`undefined` verir; alan var ama sensör değer üretmemişse `null` yazmak, "ölçülmedi"
bilgisini korur. İkisi aynı şey değildir: birincisi verinin biçimiyle, ikincisi verinin
içeriğiyle ilgilidir.

## Sembol

Sembol, her çağrıda benzersiz bir değer üreten ilkel tiptir. Aynı açıklama metniyle
üretilen iki sembol birbirine eşit değildir:

```js
console.log(Symbol("kaynak") === Symbol("kaynak"));
```

```
false
```

Kullanım alanı, nesnelere çakışma riski olmadan özellik eklemektir. Sembol anahtarlı
özellikler sıradan anahtar listelerinde ve dizileştirmede görünmez:

```js
const kaynak = Symbol("kaynak");
const kayit = { istasyon: "A1", sicaklik: 21.5, [kaynak]: "yerel dosya" };
console.log(Object.keys(kayit));
console.log(JSON.stringify(kayit));
console.log(kayit[kaynak]);
```

```
[ 'istasyon', 'sicaklik' ]
{"istasyon":"A1","sicaklik":21.5}
yerel dosya
```

Ölçüm kaydına eklenen köken bilgisi, kaydın veri içeriğini kirletmeden taşınmış oldu.
Sembollerin dil içindeki ikinci görevi — nesnelerin belirli davranışlarını
uyarlamak — bir sonraki kursun konusudur.

## İlkel Değerler Değiştirilemez

İlkel bir değerin içeriği değiştirilemez. Dizgi üzerinde konum atama girişimi katı kipte
hata verir:

```js
const ad = "A1";
try {
  ad[0] = "B";
} catch (hata) {
  console.log(hata.name + ": " + hata.message);
}
console.log(ad);
```

```
TypeError: Cannot assign to read only property '0' of string 'A1'
A1
```

Aynı işlem katı kipte olmayan bir betikte hata vermez; sessizce yok sayılır ve dizgi yine
değişmez. Kod Çalıştırma Yolları dersinde anlatılan katı kip farkının ikinci örneğidir
bu: davranış aynı, geri bildirim farklıdır.

Bu nedenle dizgi yöntemleri asla özgün değeri değiştirmez, her zaman yeni bir dizgi
üretir. Programlama Temelleri kursundaki değiştirilemez–değiştirilebilir ayrımı burada
tiplere göre kesindir: yedi ilkel tipin tamamı değiştirilemez, nesneler
değiştirilebilirdir.

## Ölçüm Kaydının Tipleri

Kursun ekseni olan veri, bu tiplerin bir araya gelmesidir:

```js
const kayit = {
  istasyon: "A1",
  sicaklik: 21.5,
  nem: null,
  dogrulandi: false,
};

for (const anahtar of Object.keys(kayit)) {
  console.log(anahtar, "->", typeof kayit[anahtar]);
}
console.log("eksik alan:", typeof kayit.basinc);
```

```
istasyon -> string
sicaklik -> number
nem -> object
dogrulandi -> boolean
eksik alan: undefined
```

Üçüncü satır bir hatırlatmadır: `nem` alanı `null` taşıdığı için `typeof` sonucu
`object` çıkar. Bir alanın gerçekten boş olup olmadığı `typeof` ile değil, doğrudan
karşılaştırmayla sınanır. Bu karşılaştırmaların hangi kurala göre yapıldığı Eşitlik
Karşılaştırmaları dersinin konusudur.

## Özet

- Değerler ilkel ya da nesnedir; yedi ilkel tip vardır ve hepsi değiştirilemezdir.
- `typeof null` sonucu `object`, fonksiyonların sonucu `function`'dır; ikisi de tip
  listesine birebir karşılık gelmez.
- Tek sayı tipi IEEE 754 çift duyarlıklı gösterimdir: `23` ile `23.0` aynı değerdir,
  onluk kesirler yaklaşıktır ve güvenli tam sayı aralığı $2^{53}-1$ ile sınırlıdır.
- `Infinity`, `-Infinity`, `NaN` ve `-0` gösterimin parçasıdır; `NaN` tipi `number`'dır.
- Dizgi uzunluğu kod birimi sayısıdır, karakter sayısı değil.
- `undefined` verilmemiş bir değeri, `null` bilinçli yerleştirilmiş bir yokluğu belirtir.

## Sonraki Adım

Güvenli tam sayı aralığının üstünde iki farklı tam sayının eşit çıkması, bu dersin
çözümsüz bıraktığı tek noktadır. Sonraki ders bu sınırın aşıldığı durumları ve dilin
buna verdiği yanıtı ele alacak: keyfi büyüklükte tam sayı taşıyan ayrı bir ilkel tip,
onun işleçlerdeki davranışı ve sayı tipiyle karıştırıldığında ortaya çıkan hata.
