JavaScript'te değerler iki kategoriye ayrılır: primitive ve reference.
Primitive (ilkel) tipler
Değer kopyalanır, doğrudan saklanır. 7 tane var:
| Tip | Örnek |
|---|---|
string | "merhaba", 'a', `hello $` |
number | 42, 3.14, -7, Infinity, NaN |
boolean | true, false |
null | null (kasıtlı yokluk) |
undefined | undefined (atanmamış) |
bigint | 9007199254740993n |
symbol | Symbol("id") (benzersiz tanımlayıcı) |
Reference tipler
Bellekte bir adres saklanır, değişkenler aynı objeye referans gösterebilir:
object({},[], fonksiyonlar, tarihler, regex…)
const a = { x: 1 };
const b = a; // aynı obje, iki referans
b.x = 99;
console.log(a.x); // 99 — a da etkilendiPrimitive'lerde böyle olmaz:
let x = 5;
let y = x;
y = 99;
console.log(x); // 5 — kopya alındıtypeof operatörü
typeof "abc" // "string"
typeof 42 // "number"
typeof true // "boolean"
typeof undefined // "undefined"
typeof {} // "object"
typeof [] // "object" ← ❗ dikkat
typeof null // "object" ← tarihi bug, hep böyle kalacak
typeof function(){} // "function"Dizi kontrolü için: Array.isArray(x).
null vs undefined
undefined: bir değişken tanımlanmış ama hiçbir değer atanmamış.null: programcı bilinçli olarak "boş" demiş.
let user;
console.log(user); // undefined — ben atamadım
let session = null; // bilinçli: "şu an oturum yok"NaN — Not a Number
Geçersiz matematik sonucu:
0 / 0 // NaN
parseInt("abc") // NaN
NaN === NaN // false ← kendisine bile eşit değil
Number.isNaN(x) // doğru kontrol budur❗Önemli
JavaScript'in tipleri dinamiktir — bir değişkene bugün string atayıp yarın number atayabilirsin. Bu güç, aynı zamanda hata kaynağıdır. Büyük projelerde TypeScript kullanmak bu yüzden yaygındır.