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ışı .
10
ayrış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 parseInt
gerçek kodunuz için gerçekten ihtiyacınız var , ancak yukarıdakiler için değil.
Number('08')
0
veya undefined
ve dizenin numarası 0
bir x
veya 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)