JavaScript’te Strict Equality (===)
JavaScript’te kullanılan en önemli operatörlerden biri strict equality (kesin eşitlik) operatörüdür ve üç tane eşittir (===) ile gösterilir. Bu operatör, iki değeri karşılaştırma yaparken hem değerlerin hem de veri tiplerinin eşit olup olmadığını kontrol eder.
Strict Equality
Her ne kadar normal eşitlik operatörü (==) de iki değer karşılaştırılabilir olsa da veri tiplerini otomatik olarak dönüştürebilir. Type coercion olarak adlandırılan tip dönüştürme işlemi nedeniyle farklı veri tiplerine sahip iki değerin eşitliği kontrol edilirken beklenmedik sonuçlar ortaya çıkabilir. Örnek vermek gerekirse, 0 == false
ifadesi true
döndürürken 0 === false
ifadesi ise false
döndürür.
Zira strict equality operatörü iki değeri karşılaştırırken veri tiplerini dönüştürmez. Daha ziyade, veri tipleri ve değerler tamamen eşleşirse true
değerini döndürür. Daha fazla örnek için aşağıdaki kodu inceleyiniz:
// ==
console.log(false == "") // true
console.log(false == []); // true
console.log("" == 0); // true
console.log("" == []); // true
console.log(0 == []); // true
console.log(0 == false); // true
// ===
console.log(false === "") // false
console.log(false === []); // false
console.log("" === 0); // false
console.log("" === []); // false
console.log(0 === []); // false
console.log(0 === false); // false
Yukarıdaki örneklerle alakalı daha detaylı bilgi için JavaScript equality table sayfasını ziyaret edebilirsiniz.
Kesin eşitlik operatörü ayrıca, NaN (Not a Number) değerleriyle de doğru bir şekilde çalışır. NaN, herhangi bir sayısal işlemin sonucunda elde edilebilen bir özel bir değerdir ve normal eşitlik operatörüyle karşılaştırılamaz. Ancak, kesin eşitlik operatörü, NaN’yi kendisiyle karşılaştırdığında, daima false döndürür.
Bilindiği üzere NaN, matematiksel işlemler sonucunda hesaplanmayan veya tanımlanamayan bir değerdir. Normal eşitlik operatörü (==) ile NaN değeri karşılaştırılamaz. Zira NaN kendisi hariç herhangi bir değerle eşit olmayan bir değerdir.
Aşağıdaki örnekte, x
değişkenine NaN
değeri atanır. Daha sonra normal eşitlik operatörü (==
) kullanılarak x
değişkeni 5’e eşit olup olmadığı kontrol edilir. Bu durumda, normal eşitlik operatörü, NaN
değerini sayısal olarak tanımlamakta başarısız olur ve sonuç olarak false
döndürür.
//NaN ==
let x = NaN;
console.log(x == 5); // false
Ancak aynı örnekte, kesin eşitlik operatörü (===
) kullanıldığında, NaN
değeri diğer herhangi bir değerle eşleştirilse bile her zaman false
döndürür. Aşağıdaki örnekte, x
değişkeni NaN
olduğu için false
döndürür.
//NaN ==
let x = NaN;
console.log(x == 5); // false
//NaN ===
let x = NaN;
console.log(x === 5); // false
Her ne kadar her iki eşitlik de false olsa da ikisi arasında fark vardır. Kesin eşitlik operatörü (===) NaN
değeriyle kendisiyle karşılaştırıldığında NaN
kendisine bile eşit olmadığı için false değeri döndürür. Yani, NaN
ile herhangi bir değer eşit olmadığı gibi, NaN
ile NaN
de eşit değildir. Bu nedenle, kesin eşitlik operatörü NaN
değerlerini doğru bir şekilde işler ve beklenmedik sonuçların oluşmasını engeller.