[javascript] krijg niet te zien wat ik verwachte

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Anoniem: 769893

Topicstarter
goedendag,

ik ben vrij nieuwe in het hele javascript wereldje.
ik ben ook pas net begonnen en kom dus als snel tegen een probleem aan.
ik probeer dus het getal 9 in de browser te krijgen ( chrome, firefox ).
maar in plaatst van een 9 krijg ik NaN te zien.
kan iemand mij helpen ze zeggen wat ik eventueel fout heb gedaan.
ik gebruik brackets en de jslint geeft geen fouten aan in mijn javascript

hier mijn html en daar na mijn javascript.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>template</title>
<link rel="stylesheet" href="#">
</head>
<body>

<script type="text/javascript" src="javascripttest1.js">
</script>

</body>
</html>

mijn javascript:

function addnumbers(a, b) {
"use strict";
var c = a + b;
return c;
}

window.document.write(addnumbers(3 + 6));

Beste antwoord (via Anoniem: 769893 op 16-05-2016 18:40)


  • L01
  • Registratie: December 2003
  • Laatst online: 19-07 14:12

L01

code:
1
window.document.write(addnumbers(3,6));


Je telde door de + operator de 2 getallen al bij elkaar op waardoor de functie addnumbers(9, null) werd uitgevoerd. Null is Not A Number vandaar dat je NaN kreeg.

[ Voor 59% gewijzigd door L01 op 16-05-2016 17:39 ]

Hi, I'm a signature virus. Put me in your signature to help me spread.

Alle reacties


Acties:
  • +2 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 00:42
Ik zou in je functie eens dit zetten (voor regel 20):
JavaScript:
1
2
alert(a);
alert(b);


Dan zie je los van elkaar wat nu a en wat b is. Dan moet je gauw genoeg je fout zien.

PS. code tags helpen het geheel leesbaar te maken zoals je in mijn post ziet.

[ Voor 3% gewijzigd door CurlyMo op 16-05-2016 17:01 ]

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

Anoniem: 769893

Topicstarter
ik zal er natuurlijk nog even bij moeten zeggen dat ik mijn javascript als een extern bestand heb

[ Voor 81% gewijzigd door Anoniem: 769893 op 16-05-2016 17:04 ]


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 00:42
Ik had mijn antwoord al aangepast. Voor regel 20.

Als je wil weten wat ik bedoel met regel 20:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>template</title>
<link rel="stylesheet" href="#">
</head>
<body>

<script type="text/javascript" src="javascripttest1.js">
</script>

</body>
</html>

mijn javascript:

function addnumbers(a, b) {
"use strict";
var c = a + b;
return c;
}

window.document.write(addnumbers(3 + 6));

[ Voor 81% gewijzigd door CurlyMo op 16-05-2016 17:04 ]

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

Anoniem: 769893

Topicstarter
duidelijk ik ga kijken
edit:
als ik dat doe en terug naar de browser ga,
krijg ik 2 popups.
de eerste met 9 en tweede staat undefined.
dus ik snap er nog geen snars van.
iemand ideeën?

in brackets zegt jslint dat nu regel 20

'alert' was used before it was defined. alert(a);

wat houd dat in?

[ Voor 105% gewijzigd door Anoniem: 769893 op 16-05-2016 17:21 ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • L01
  • Registratie: December 2003
  • Laatst online: 19-07 14:12

L01

code:
1
window.document.write(addnumbers(3,6));


Je telde door de + operator de 2 getallen al bij elkaar op waardoor de functie addnumbers(9, null) werd uitgevoerd. Null is Not A Number vandaar dat je NaN kreeg.

[ Voor 59% gewijzigd door L01 op 16-05-2016 17:39 ]

Hi, I'm a signature virus. Put me in your signature to help me spread.


Acties:
  • 0 Henk 'm!

Anoniem: 769893

Topicstarter
Je telde door de + operator de 2 getallen al bij elkaar op waardoor de functie addnumbers(9, null) werd uitgevoerd. Null is Not A Number vandaar dat je NaN kreeg.
ja dat was mijn fout.
poe he dat ik dat zelf niet zag :?
klinkt ook erg logisch.
erg bedankt voor het helpen.
nu heb ik wel geleerd dat je echt zou moet kijken wat je waar hebt staan.
nogmaals erg bedankt.

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 00:42
L01 schreef op maandag 16 mei 2016 @ 17:37:
code:
1
window.document.write(addnumbers(3,6));


Je telde door de + operator de 2 getallen al bij elkaar op waardoor de functie addnumbers(9, null) werd uitgevoerd. Null is Not A Number vandaar dat je NaN kreeg.
Jammer dat je het antwoord zo voorkauwd...

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

Anoniem: 769893

Topicstarter
ja ik was al wel zelf op zoek gegaan.
had al geprobeerd me javascript her en der aan aan te passen.
maar ik had zelf echt NOOIT aan de + operator gedacht in mijn laatste regel.
ook al is het nu voorgekauwd .
ik heb nu wel de uit leg voor als ik NaN te zien krijg.

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 00:42
Anoniem: 769893 schreef op maandag 16 mei 2016 @ 18:51:
ja ik was al wel zelf op zoek gegaan.
Je moet vooral je aannamens testen, vandaar de alert. Dan had je gezien dat je je functie verkeerd aanroept.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

Anoniem: 769893

Topicstarter
ja ik merk wel dat je erg goed moet opletten met wat je neer zet.
is een goede les dit.

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 00:42
Anoniem: 769893 schreef op maandag 16 mei 2016 @ 17:05:
als ik dat doe en terug naar de browser ga,
krijg ik 2 popups.
de eerste met 9 en tweede staat undefined.
dus ik snap er nog geen snars van.
iemand ideeën?
Snap je dit nu ondertussen? Dit is toch wel een kern ding anders ga je continue vastlopen.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • L01
  • Registratie: December 2003
  • Laatst online: 19-07 14:12

L01

Goed dat het opgelost is. Javascript is helaas niet zo strict, in c# bevoorbeeld zou je een compilatie error krijgen als je de functie op deze manier aanroept.

Ik raad aan om eens in te lezen over javascript debugging. De suggestie van @CurlyMo door te debuggen met Alerts is aardig maar een beetje nasty (je moet steeds die alerts wegklikken). Je zou ook Console.log kunnen gebruiken of de javascript debugging tools in Firebug of de Chrome developer toolbar.

Hi, I'm a signature virus. Put me in your signature to help me spread.


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 00:42
L01 schreef op maandag 16 mei 2016 @ 22:06:
De suggestie van @CurlyMo door te debuggen met Alerts is aardig maar een beetje nasty (je moet steeds die alerts wegklikken). Je zou ook Console.log kunnen gebruiken of de javascript debugging tools in Firebug of de Chrome developer toolbar.
Helemaal waar, maar TS begrijpt waarschijnlijk niet eens wat er gebeurt bij de alerts. Laten we daar dus maar mee beginnen :)

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

Anoniem: 769893

Topicstarter
Ik merk wel dat ik nog een lange weg te gaan heb.
En het klopt ik heb geen idee wat er precies gebeurt bij alerts.
Maar daar voor ben ik ook met een leer proces bezig.
En blijkbaar zijn hier mensen die vriendelijk genoeg zijn om mij te helpen in mijn tijd van nood

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20-07 08:57

Janoz

Moderator Devschuur®

!litemod

Met die alert laat je een popup zien. Door daar de variabele 'a' aan mee te geven zie je een popup met de waarde van a.

Je gaf aan dat je eerst een popup met 9 en daarna een popup met 'undefined' kreeg. De conclusie die je daaruit zou kunnen trekken is dat de waarde van a gelijk is aan 9 en de waarde van b niet is gedefinieerd. Dit is iets anders dan je verwacht. Je zou immers verwachten dat je een popup van 3 en een popup van 6 zou krijgen. Op dit moment weet je iets meer over wat er nu mis gaat. Je begon met 'waarom is dit NaN', en je bent nu bij 'waarom is a gelijk aan 9 en b niet gedefinieerd'. Nu is in ieder geval duidelijk waarom a+b geen 9 oplevert. Je kunt undefined immers niet optellen.

Dit is het belangrijkste proces in software ontwikkeling. Vergelijk wat er daadwerkelijk gebeurt met wat je eigenlijk zou verwachten en probeer exact de plek te vinden waar die twee van elkaar af beginnen te wijken.

Tot slot zou ik je willen aanraden om niet alert, maar console.log() te gebruiken. Deze tekst is te lezen in het developers view van je browser en is een stuk handzamer dan al die popupjes.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1