[JS] Wazige parseInt met 08 / 09

Pagina: 1
Acties:

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Topicstarter
Als ik de volgende code gebruikt:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
<title>parseInt werkt niet</title>

<script type="text/javascript">
function woei(eleValue){
    alert(parseInt(eleValue));
}
</script>
</head>

<body>

<form>
  <input type="text" name="BtM909" size="20" onblur="woei(this.value)">
</form>

</body>
</html>


Dan lijkt het steeds mis te gaan op het moment dat ik een van de volgende values invoer: 08 of 09 (of 0000008 :)).

Los van het feit dat de code niet volledig is, de originele code zit in een webapplicatie die verder wel voldoet aan, maar parseInt zou toch gewoon een 8 of 9 moeten returnen?

Het gekke is dat het met de volgende nummers wel gewoon werkt:
01, 02, 03, 04, 05, 06, 07 :?

*Ik kan het op dit moment alleen testen in W2K, IE6.0*

[ Voor 12% gewijzigd door BtM909 op 23-12-2003 11:18 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

octaal :)

JavaScript:
1
parseInt('08', 10);


oftewel altijd het getalstelsel meegeven als je decimaal wilt ;)

Intentionally left blank


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Topicstarter
Thanks anyhoe :>

[ Voor 107% gewijzigd door BtM909 op 23-12-2003 11:25 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 08:44

Maasluip

Kabbelend watertje

Het lijkt erop alsof 08 en 09 als octaal worden gezien (en dan invalid zijn en dus 0 teruggeven)
Als je bijvoorbeeld 0x10 ingeeft komt hij terug met 16.

Geef maar eens 020 in, komt hij terug met 16. 018 en 019 wordt 1.
Lijkt wel een bugje in de functie te zijn. Waarom geef je het tweede cijfer als je een invalid invoer geeft (028 -> 2, 038 -> 3)?

[ Voor 40% gewijzigd door Maasluip op 23-12-2003 11:26 ]

Signatures zijn voor boomers.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Topicstarter
mdeen schreef op 23 december 2003 @ 11:24:
Het lijkt erop alsof 08 en 09 als octaal worden gezien (en dan invalid zijn en dus 0 teruggeven)
Als je bijvoorbeeld 0x10 ingeeft komt hij terug met 16.
Of nog erger, wordt de parseInt standaard als octaal gezien? :(

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-05 18:53

Bosmonster

*zucht*

Handiger was inderdaad het tientallig stelsel als default... maja...

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 08:44

Maasluip

Kabbelend watertje

BtM909 schreef op 23 december 2003 @ 11:25:
[...]

Of nog erger, wordt de parseInt standaard als octaal gezien? :(
Het is een vrij oud gebruik om getallen die met 0 beginnen als octaal te zien.
Misschien omdat 0 en o op elkaar lijken?

Signatures zijn voor boomers.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:55

crisp

Devver

Pixelated

http://devedge.netscape.c...rence/toplev.html#1064173
If the radix is not specified or is specified as 0, JavaScript assumes the following:

• If the input string begins with "0x", the radix is 16 (hexadecimal).
• If the input string begins with "0", the radix is eight (octal). This feature is deprecated.
• If the input string begins with any other value, the radix is 10 (decimal).

Intentionally left blank


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 08:44

Maasluip

Kabbelend watertje

Ofwel: altijd parseInt(value, 10) gebruiken.
edit:
Oh, dat zei crisp ook al in zijn eerste post


ps: dit is echt standaard gebruik, 0x als hexadecimaal, 0 als octaal. In C wordt dat ook zo gedaan (en java leunt zwaar op C)

[ Voor 10% gewijzigd door Maasluip op 23-12-2003 11:35 ]

Signatures zijn voor boomers.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Topicstarter
mdeen schreef op 23 december 2003 @ 11:33:
[...]
Ofwel: altijd parseInt(value, 10) gebruiken.
edit:
Oh, dat zei crisp ook al in zijn eerste post


ps: dit is echt standaard gebruik, 0x als hexadecimaal, 0 als octaal. In C wordt dat ook zo gedaan (en java leunt zwaar op C)
Ik snap het al, alleen raar dat 0000000008 ook hexadecimaal wordt aangezien. Anyway: mijn probleem is opgelost... Bedankt allen

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 08:44

Maasluip

Kabbelend watertje

BtM909 schreef op 23 december 2003 @ 11:38:
[...]

Ik snap het al, alleen raar dat 0000000008 ook hexadecimaal wordt aangezien. Anyway: mijn probleem is opgelost... Bedankt allen
Nee, octaal. het begint met een 0 dus het is octaal.

Signatures zijn voor boomers.

Pagina: 1