JavaScript – parseInt() başınızı ağrıtmasın

JavaScript parseInt() fonksiyonunu nasıl bilirdiniz? Parametre olarak aldığı değerden bir tam sayı ortaya çıkartmaya çalışan güzide bir JavaScript fonksiyonu olan parseInt() geçen gün beni hayretler içerisinde bıraktı. Buyrun başıma geleni kendiniz görün. (Firebug kullananlar direkt console’da kodları çalıştırabilirler.)

parseInt('06');
// 6
parseInt('07');
// 7
parseInt('08');
// 0
parseInt('09');
// 0


Durumu bilenler hınzırca gülümsemiş olabilirler amma velakin bilmeyenler eminim benim gibi ufak bir şaşkınlık geçirmişlerdir. İlk aklıma gelen soru “Acaba fonksiyonda bir bug mı var?” sorusu oldu. Ufak bir araştırma konu hakkındaki cehaletimi ortaya koydu. Kısaca:

It’s not a bug, it’s a feature! (Bu bir hata değil bir özelliktir.)

Efendim bu parseInt() fonksiyonu iki parametre ile çalışabilen bir fonksiyonmuş. İkinci parametre seçime bağlı olarak kullanılabiliyormuş ve fakat kullanılmadığında varsayılan bir değer atanmıyormuş. Şöyle ki;

  • Eğer işlenecek parametre “0x” ile başlıyorsa, fonksiyon parametrenin 16’lık düzende bir sayı olduğunu varsayıp ona göre davranıyor.
  • Eğer işlenecek parametre “0” ile başlıyorsa bu durumda da fonksiyon parametrenin 8’lik düzende bir sayı olduğunu varsayarak ona göre davranıyor.
  • İlk iki durum geçerli değilse bu durumda fonksiyon parametreyi 10’luk düzende ele alıp sonuç üretmeye çalışıyor.

Bizim problemimiz ikinci varsayımdan kaynaklanıyor. 10’luk düzende bir sonuç beklentisiyle fonksiyona “08” ya da “09” değerlerini parametre olarak verdiğimizde, fonksiyon ikinci varsayıma göre hareket ediyor. Fakat 8’lik düzende 08 ya da 09’un karşılığı olmadığından doğru bir sonuç döndürmüyor. Peki bu durumdan nasıl kaçınabiliriz? İkinci parametreyi kullanarak.

parseInt fonksiyonu ikinci parametre olarak işlem yapacağı sayı düzenini alabiliyor. Yani fonksiyonu şu şekilde çalıştırırsak istediğimiz sonuca ulaşabiliriz.

parseInt('08',10);
// 8
parseInt('09',10);
// 9

Çalışma anında bu tip problemlerin ortaya çıkmasının önüne geçmek için her zaman parseInt fonksiyonuna sayı düzenini ikinci parametre olarak geçmenizi tavsiye ederim.

“JavaScript – parseInt() başınızı ağrıtmasın” üzerine 4 yorum

  1. tebrik ederim, küçük fakat işe yarar bir noktaya dikkat çekmişsiniz.
    sıkça javascript ile vede parseInt le haşır neşir oluyorum. büyük ihtimalle yakın zamanda karşılaşırım bu özellikle :)

    teşekkürler

  2. Teşekkürler yarım saattir beni çıldırtan duruma çözüm getirdiniz.

Yorumlar kapalı.