JavaScript’te program yazarken bazen iki verinin “aynı” olup olmadığını kontrol etmemiz gerekir. Bu, kullanıcıdan gelen veriyle elimizdeki değeri karşılaştırmak, iki listeyi kontrol etmek veya aynı şeyi temsil edip etmediklerini sorgulamak için yapılır. Ancak, bu tür karşılaştırmalarda özellikle diziler (arrays) ile çalışırken dikkatli olunmalıdır. Çünkü diziler, JavaScript’te beklediğiniz gibi karşılaştırılmaz.
Bu yazıda, sadece dizilerin karşılaştırılma mantığını ve bellekte nasıl saklandıklarını anlamaya odaklanacağız. Bu konuyu sade örneklerle açıklayacağız.
1. Basit Değerler Karşılaştırıldığında
JavaScript’te sayılar ve metinler gibi temel (primitive) veri türlerini karşılaştırmak oldukça nettir. Örneğin:
"kitap" === "kitap" // true
5 === 5 // true
Burada ===
operatörü kullanılıyor. Bu operatör, hem değerin hem de veri türünün aynı olup olmadığını kontrol eder. İki taraf da aynıysa, sonuç true
döner.
2. Dizilerde İşler Değişir
Şimdi aynı mantıkla iki dizi karşılaştıralım:
["güneş", "ay"] === ["güneş", "ay"] // false
İlk bakışta bu iki dizi tamamen aynı görünüyor. İçlerinde aynı kelimeler var, aynı sırada dizilmiş. Ama JavaScript bu karşılaştırmayı false olarak değerlendirir.
Neden? Çünkü JavaScript, dizilerin içeriğini değil, onların bellekteki yerlerini karşılaştırır.
3. Bellek ve Referans Mantığı

Basit veriler bellekte doğrudan saklanır. Örneğin:
let x = 10;
Burada x
, doğrudan değeri yani 10’u bellekte tutar. Ama diziler gibi karmaşık yapılar doğrudan saklanmaz. Bunun yerine, JavaScript bellekte dizinin bulunduğu yeri, yani referansını saklar.
Örneğin:
let liste = [1, 2, 3];
Burada liste
, dizinin içeriğini değil, o dizinin bellekteki adresini saklar. Yani, bir nevi “bu dizi şurada duruyor” demiş olur.
4. Aynı Referansı Paylaşan Değişkenler
Bu durumu daha iyi anlamak için bir örnek:
let meyveler = ["elma", "armut"];
let sepet = meyveler;
Burada sepet
, meyveler
değişkeninin tuttuğu diziyi yeni baştan oluşturmaz. Bunun yerine, aynı bellekteki diziye başka bir isimle işaret eder.
Eğer şimdi meyveler.push("çilek")
yaparsak, sepet
de bu değişiklikten etkilenir çünkü ikisi de aynı diziyi gösteriyor.
console.log(sepet); // ["elma", "armut", "çilek"]
Aynı şekilde:
sepet.pop(); // "çilek" çıkar
console.log(meyveler); // ["elma", "armut"]
Yani, ikisinden birinde yapılan değişiklik, diğerine de yansır. Çünkü ikisi de aynı referansa sahiptir.
5. Gerçekten Aynılar mı? JavaScript Nasıl Anlar?
Bu tür durumlarda ===
operatörü çalışır:
meyveler === sepet // true
Çünkü JavaScript şunu sorar:
Bu iki değişken aynı bellekteki adresi mi işaret ediyor?
Eğer cevap evetse, ===
sonucu true
olur. Ama içeriği birebir aynı olan ama farklı yerlerde tutulan diziler varsa:
let a = [7, 8, 9];
let b = [7, 8, 9];
console.log(a === b); // false
Bu iki dizi görünüşte aynı ama bellekte iki ayrı yerde bulunuyor. Bu yüzden JavaScript onları aynı kabul etmez.
6. İçeriği Karşılaştırmak Kolay Değil
Eğer iki dizinin içeriği aynı mı diye kontrol etmek istiyorsanız, JavaScript bunu sizin yerinize otomatik olarak yapmaz. Siz manuel olarak her elemanı karşılaştırmalı veya farklı yöntemler (örneğin JSON.stringify
) kullanmalısınız.
Ama bu yazıda yalnızca referans temelli karşılaştırmalar ele alındığı için, bu konuya daha fazla girmiyoruz.
Sonuç
JavaScript’te dizilerin karşılaştırılması, göründüğü kadar basit değildir. İki dizi aynı içeriğe sahip olsa bile, farklı referanslara sahipse ===
veya ==
ile yapılan karşılaştırma false döner. Sadece aynı diziyi gösteren iki değişkenin karşılaştırması true
olur.
Bu nedenle, JavaScript’te dizilerle çalışırken şunlara dikkat etmek gerekir:
===
ve ==
operatörleri, dizilerin içeriğini değil, bellekteki adresini karşılaştırır.
- Aynı içeriğe sahip iki ayrı dizi, JavaScript’e göre “aynı” değildir.
- Bir diziyi başka bir değişkene atarsanız, aslında sadece aynı yeri işaret etmiş olursunuz.
- Değişkenlerden birinde yapılan değişiklik, diğerini de etkiler.
Bu farkları erken öğrenmek, JavaScript’te hata yapmamanız açısından oldukça önemlidir.