JavaScript’te “Type Coercion” Kullanımı
JavaScript’te “type coercion” kavramı, kabaca bir veri tipinin, bir başka veri tipini kendinden olmaya zorlama işlemidir diyebiliriz.
JavaScript’te “Type Coercion”
Bilindiği üzere JavaScript, farklı veri tiplerini destekleyen bir programlama dilidir. Ancak, iki farklı veri tipi arasında işlem yapıldığında JavaScript otomatik olarak bu veri tiplerinden birini diğerine dönüştürmeye çalışır. İşte bu dönüştürme işlemine, yani bir veri tipinin bir başka veri tipini kendisinden olmaya zorlama olayına “type coercion (tip zorlaması)” denir. “Peki, hangi değer tipleri coercion olmaktadır?”
JavaScript’te “coercion” işlemi, üç veri tipi arasında meydana gelmektedir. Bakınız:
- string
- boolean
- number
Bilindiği üzere JavaScript’te +
operatörü, sayısal verilerde toplama işlemi yapabildiği gibi string veri tipleriyle beraber kullanıldığında da “string concatenation” olarak adlandırılan bir durum ortaya çıkmaktadır. Böylece “toplanan” string ifadelerini birbirleriyle birleşmektedir. Aşağıdaki örneği inceleyiniz:
1 2 3 4 5 6 7 8 9 |
// Toplama let a = 5; let b = 15; console.log(a + b); // 20 // String concatenation let x = "Brad"; let y = "Pitt"; console.log(x + y); // BradPitt |
Peki, sayısal bir veri tipi (number) ile metinsel bir veri tipi (string) arasında artı +
operatorünün kullanılmasıyla ne olur dersiniz?
- Bu durumda JavaScript, ilgili sayısal veri tipini metinsel veri tipine zorlayarak “type coercion” oluşturur. Aşağıdaki örneği inceleyiniz:
1 2 3 4 5 6 7 8 9 |
// String Coercion let a = 5; //number let b = "15"; //string console.log(a + b); // 515 - String // String Coercion let x = "Brad"; //string let y = 10; //number console.log(x + y); // Brad10 - String |
- Eğer sayısal bir veri tipi (number) ile metinsel bir veri tipi (string) arasında eksi
-
operatorü kullanılırsa, JavaScript metinsel olarak yazılmış sayısal veri tiplerini (örneğin: “15”), sayısal veri tipine zorlar. Ancak normal bir metinsel veri tipi ile eksi-
opertörü kullanılırsa NaN (Not a Number) döndürür. Örneğin:
1 2 3 4 5 6 7 8 9 |
// Metinsel veri tipinde yazılmış sayısal veri tipi let a = 5; // number let b = "15"; // string console.log(a - b); // -10 - number // Metinsel let x = "Brad"; // string let y = 10; // number console.log(x - y); // NaN (Not-A-Number) |
- Bir değer doğrudan bir ifadeye veya kontrol yapısına (if, while gibi) verildiğinde, JavaScript bu değeri otomatik olarak bir “boolean” değere dönüştürür. Aşağıdaki örneği inceleyiniz:
1 2 3 4 5 6 7 8 |
// string veri tipi coercion'a uğrayıp boolean oluyor if ("hello") { console.log("The string is true."); } else { console.log("The string is false."); } // çıktı: The string is true. |
Yukarıdaki örnekte, if içine yazılan metinsel veri tipi “hello” doğrudan bir ifadeye verildiğinde, JavaScript tarafından otomatik olarak boolean “true” değerine dönüştürür ve ilk koşul çalışır.
- Benzer şekilde, sayısal veri tipleri de boolean bir değere dönüştürülebilir. Sıfırdan farklı tüm sayılar true olarak değerlendirilirken, 0 “false” olarak kabul edilir. Aşağıdaki örneği inceleyiniz:
1 2 3 4 5 6 7 8 |
// sayısal veri tipi coercion'a uğrayıp boolean oluyor if (0) { console.log("The number is true."); } else { console.log("The number is false."); } // Çıktı: The number is false. |
Yukarıdaki örnekte 0, JavaScript tarafından otomatik olarak boolean false değerine dönüştürülür ve ikinci koşul çalışır.
Bilindiği üzere JavaScript’te eşit eşit midir “==
” operatörü iki değerin eşit olup olmadığını kontrol etmek için kullanılır. Ancak bu operatörün kullanımıyla, “type coercion” meydana gelebileceğinden beklenmedik sonuçlar gözlemlenebilir. Bakınız:
1 2 3 4 5 6 7 |
// =0 ile type coercion console.log(false == "") // true console.log(false == []); // true console.log("" == 0); // true console.log("" == []); // true console.log(0 == []); // true console.log(0 == false); // true |
Bu nedenle eşit eşit midir “==
” operatörü yerine eşit eşit eşit midir “===
” operatörünü kullanmanızı tavsiye ederim. Daha detaylı bilgi için JavaScript equality table sayfasını ziyaret edebilirsiniz.
JavaScript’te “type coercion” kavramı, kodun tahmin edilebilirliğini azalttığı için beklenmedik sonuçlara ve hatalara yol açabilir. Bu nedenle, doğru şekilde kullanmak oldukça önemlidir.