JavaScript'te aşağıdakileri çalıştırmayı deneyin:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
Sadece JavaScript lider sıfır bir işaret düşündüğünü zor yoldan öğrendim sekizlik tamsayı ve hiçbir olmadığından "8"veya "9"baz-8'de, işlev sıfırla döner. Beğen ya da beğenme, bu tasarım gereğidir .
Geçici çözümler nelerdir?
Not: Tamlık uğruna, bir çözüm göndermek üzereyim, ancak bu nefret ettiğim bir çözüm, bu yüzden lütfen başka / daha iyi cevaplar gönderin.
Güncelleme:
JavaScript standardının 5. Basımı ( ECMA-262 ) bu davranışı ortadan kaldıran bir değişiklik getirmektedir. Mozilla iyi sahiptir değer artışı .
10ayrıştırma numara öneki sürece (ondalık) 0xörneğin 0xFF, bu durumda 16. Umarım, bir gün, bu konuya taban parametre varsayılan içinde uzak bir hafıza olacak.
+'08' === 8? Doğru! Belki de parseIntgerçek kodunuz için gerçekten ihtiyacınız var , ancak yukarıdakiler için değil.
Number('08')
0veya undefinedve dizenin numarası 0bir xveya tarafından takip edilmeyen bir rakamla başlar X, ardından uygulama kendi takdirine göre sayıyı sekizli veya ondalık olarak yorumlayabilir. Bu durumda sayıları ondalık olarak yorumlamaya teşvik edilir. " ( benim vurgu)