Tür zorlamasına dikkat edin: Bu gelişmiş özellik, ince hataların nedeni olabilir, bu nedenle nasıl çalıştığını bildiğinizden emin olun.
JavaScript'in dinamik yazma özelliği, kodunuzun biraz daha basit olabileceği anlamına gelir, ancak yine de hata yapmak mümkündür. Onlardan kaçınmak için, JavaScript'in farklı türlerdeki değerleri nasıl çözdüğünü bilmek ve bunları karşılaştırmak yararlıdır.
JavaScript'te tür dönüştürme ve zorlamayı anlamak, güvenilir ve verimli programlar yazmak için çok önemlidir. Her kavramın, kodunuzun davranışını etkileyebilecek özel kullanım durumları ve en iyi uygulamaları vardır.
JavaScript'te Tür Dönüştürme ve Zorlama Neden Olur?
JavaScript dili dinamik olarak yazılır. Bu, statik olarak yazılan dillerin aksine, JavaScript'in bir değişkeni kullanmadan önce veri türünü açıkça tanımlamanızı gerektirmediği anlamına gelir. Bunun yerine JavaScript, değişkenin değerine bağlı olarak türü çalışma zamanında belirler.
Çalışma zamanına kadar veri türleri açıkça bildirilmediğinden, farklı veriler gerektiren işlemler gerçekleştirdiğinizde JavaScript türleri, gerçekleştirmek istediğiniz işlem için otomatik olarak birbirleriyle uyumluluğunu kontrol eder. Eğer birbirleri ile uyumlu ise işlem normal olarak devam eder.
Ancak, işlemle uyumsuz olduklarını varsayalım; örneğin, bir dize ve bir sayı eklemeye çalışmak. Bu gibi durumlarda JavaScript, hata atmak yerine işlemin başarılı olmasını sağlamak için türlerden birini diğerine uyması için otomatik olarak "zorlar". Bu süreç, tip zorlama veya örtülü zorlama olarak bilinir.
Tür Zorlama
Tür zorlaması, bir işlemin başarıyla yürütülmesini sağlamak için bir programın çalışması sırasında JavaScript tarafından gerçekleştirilen, bir değerin bir veri türünden diğerine otomatik olarak dönüştürülmesidir.
Ancak tüm veri türleri zorlanamaz. Dize, sayı ve boole yalnızca JavaScript veri türleri dilin farklı bir türe zorlayacağı. JavaScript'in zorlayamadığı veri türleri ile uyumsuz bir işlem gerçekleştirmeye çalıştığınızda hata verecektir.
JavaScript, türleri işlem türüne ve işlemde kullandığınız operatöre göre zorlar.
“+” Operatörü ile Zorlama
JavaScript'te "+” operatörü, işlenenlerinin türlerine bağlı olarak iki farklı davranışa sahiptir. Hem sayısal toplama hem de dizi birleştirme gerçekleştirebilir. Bu, işlenenlerden biri beklenen türde olmadığında tür zorlamasına yol açabilir.
Her iki işlenen de sayıysa, “+” operatörü toplama işlemini gerçekleştirir:
izin vermek sayı1 = 42;
izin vermek say2 = 10;
izin vermek toplam = sayi1 + sayi2; // Ek
konsol.log (toplam); // 52
Her iki işlenen de dize ise, "+” operatörü dize birleştirme gerçekleştirir:
izin vermek dizi1 = "Merhaba";
izin vermek dizi2 = "dünya";
izin vermek sonuç = str1 + " " + str2; // Dizi birleştirme
konsol.log (sonuç); // "Selam Dünya"
Bununla birlikte, işlenenlerden biri bir dize değilse, JavaScript, birleştirme işlemini gerçekleştirmeden önce onu dolaylı olarak bir dizeye zorlar:
// Sayı ve Dizi
izin vermek sayı = 42;
izin vermek dizi = "Merhaba";// num bir dizeye zorlanır ve ardından birleştirilir
izin vermek sonuç_1 = sayi + dizi;
konsol.log (sonuç_1); // "42Merhaba"// Dize ve Boolean
izin vermek bol = doğru;
// bool bir dizgeye zorlanır ve ardından birleştirilir
izin vermek sonuç_2 = bool + str;
konsol.log (sonuç_2); // "gerçekMerhaba"
“-” İşleci İle Zorlama
JavaScript'te "-” operatörü öncelikle çıkarma işlemleri için kullanılır. İşlenenlerden biri veya her ikisi “ içeren bir işlemde-” operatörü bir sayı değil, JavaScript onu bir sayıya zorlamaya çalışacak.
Her iki işlenen de sayı olduğunda, JavaScript çıkarma işlemini gerçekleştirir. Ayrıca, işlenenlerden biri veya her ikisi bir sayıyı temsil eden diziler olduğunda da çıkarma işlemi gerçekleştirir:
sabit sayı1 = 10;
sabit say2 = 20;
sabit sonuç_1 = sayı2 - sayı1; // Çıkarma
konsol.log (sonuç_1); // 10
sabit diziNum = "10";
sabit diziSayı2 = "20";
sabit sonuç = strNum2 - strNum; // Sayılara zorlama ve ardından çıkarma yazın
konsol.log (sonuç_1); // 10
İşlenenlerden hiçbiri bir sayı veya bir sayıyı temsil eden bir dize olmadığında, JavaScript veri türünü sayısal eşdeğerine zorlamaya çalışır. Veri türünün sayısal karşılığı yoksa, işlem geri döner NaN (Sayı Değil):
// true 1'e zorlanır, false 0'a zorlanır
sabit boolNum = doğru;
sabit boolNum2 = YANLIŞ;
sabit sonuç_1 = boolNum - boolNum2;
konsol.log (sonuç_1); // 1// boş diziler 0'a zorlanır
sabit diziNum = [];
sabit diziNum2 = [];
sabit sonuç_2 = diziNum - diziNum2;
konsol.log (sonuç_2); // 0
// boş nesneler NaN'ye zorlanır
sabit nesneNum = {};
sabit sonuç_3 = diziNum - nesneNum;
konsol.log (sonuç_3); // 0 - NaN = NaN
Bu örnekte, JavaScript boole değerlerini zorlar doğru Ve YANLIŞ sayısal eşdeğer değerlerine, 1 Ve 0, sırasıyla. Boş diziler zorlanır 0, ve boş nesneler zorlanır NaN.
Eşitlik (==)/() Operatörleri ile Zorlama
JavaScript'te eşitlik işleçleri (== Ve ) eşitlik için değerleri karşılaştırın. Ancak, tür zorlaması nedeniyle farklı davranırlar.
“==” (gevşek eşitlik) operatörü tür zorlaması gerçekleştirir, yani karşılaştırmadan önce işlenenleri aynı türe dönüştürmeye çalışır:
"10" == 10; // doğru
Bu örnekte JavaScript, "10" dizesini 10 sayısına zorlar, böylece ifade şu şekilde değerlendirilir: doğru.
Ancak "” (katı eşitlik) operatörü tip zorlaması yapmaz. Karşılaştırmanın geri dönmesi için değerin ve türün aynı olması gerekir doğru:
"10"10; // YANLIŞ
Bu örnekte, karşılaştırma sonuçları YANLIŞ çünkü işlenenler farklı tiptedir (dize ve sayı).
Genel olarak kullanmalısınız Beklenmeyen tür zorlama davranışından kaçınmak için JavaScript'te (katı eşitlik) operatörü.
Tür zorlaması veya örtük dönüştürme, otomatik yapısı nedeniyle beklenmeyen davranışlara yol açabilir. Türleri dönüştürmeniz gereken durumlarda, türleri açıkça dönüştürmeniz önerilir. Türleri açıkça dönüştürme işlemi, tür dönüştürme olarak bilinir. Aynı zamanda tip dökümü ve açık tip dönüşümü olarak da adlandırılır.
Tip Dönüşümü
Tür dönüştürme olarak da bilinen tür dönüştürme, JavaScript'te bir değeri bir veri türünden diğerine aşağıdaki gibi yerleşik işlevleri kullanarak dönüştürmenin açık işlemidir. Sayı(), Sicim(), Boole(), ayrıştırma(), Ve ayrıştırmaFloat().
Dönüştürmek istediğiniz değeri yerleşik dönüştürme işlevlerine argüman olarak ileterek tür dönüştürme işlemini gerçekleştirebilirsiniz. Bu işlevler daha sonra değerinizi istediğiniz türe dönüştürür.
İşte kullanan bir örnek Sayı() işlev:
sabit sayıStr = "123";
sabit sayı = Sayı(numStr); // Bir diziyi sayıya dönüştürür
konsol.log (sayı); // 123
Geçerli bir sayı olan bir dizeyi argüman olarak iletmek Sayı() işlev bir sayı döndürür. Geçersiz bir sayı olan bir dize iletmek döndürür NaN.
İşte kullanan bir örnek Sicim() işlev:
sabit bol = doğru;
sabit dizi2 = Sicim(bool); // Boolean'ı string'e dönüştürür
konsol.log (str2); // "doğru"
Bir Sembol dışında herhangi bir veri türünün içine geçirilmesi Sicim() işlev, veri türünü bir dizgeye dönüştürür.
İşte kullanan bir örnek Boole() işlev:
// Bir dizgeyi bir boole'ye dönüştür (truthy: true, falsy: false)
sabit dizi = "Merhaba";
sabit bol2 = boole(str);
konsol.log (bool2); // doğru
Doğru değerlerin iletilmesi Boole() işlev, boolean "true" değerini döndürürken, falsy değerleri geçerken boolean "false" değerini döndürür.
İşte kullanan bir örnek Ayrıştırma() Ve AyrıştırFloat() işlev:
// Bir diziyi tamsayıya çevir
sabit sayıStr = "123.00";
sabit sayı1 = ayrıştırma(numStr);
konsol.log (sayı1); // 123
// Bir diziyi kayan noktalı sayıya dönüştür
sabit floatStr = "3.14";
sabit say2 = ayrıştırmakFloat(floatStr);
konsol.log (sayı2); // 3.14
bu ayrıştırma() işlev bir dizge bağımsız değişkenini ayrıştırır ve bir tamsayı döndürür. bu ayrıştırmaFloat() işlev, bir dizeyi kayan noktalı bir sayıya dönüştürür.
Tür Zorlama ve Dönüşümden Yararlanma
Tür zorlama ve dönüştürmeyi anlayarak, bunları kodunuzda ne zaman ve nasıl etkili bir şekilde kullanacağınız konusunda bilinçli kararlar verebilirsiniz. Kısa ve kullanışlı kod için tür zorlamasını makul bir şekilde kullanarak ve kasıtlı ve öngörülebilir tür dönüştürmeleri için açık tür dönüştürmeye güvenerek doğru dengeyi bulmak önemlidir.