Onduidelijke ternary-operator in geneste for-loops

Status
Niet open voor verdere reacties.

antonwas

Gebruiker
Lid geworden
11 nov 2006
Berichten
254
Beste allemaal,

Ik ben het boek Object Oriented JavaScript aan het lezen. In dit boek staat het volgende script. Het print een simpele sneeuwvlok (in de vorm van *) in de console van een browserdebugger. Het is praktisch nergens bruikbaar voor, maar het is gewoon voor mijn eigen inzicht.

Code:
var res = '\n', i, j;
for(i = 1; i <= 7; i++) {
for(j = 1; j <= 15; j++) {
res += (i * j) % 8 ? ' ' : '*';
}
res+= '\n';
}

Ik begrijp alleen de ternary-operator in de binnenste for-loop niet. i wordt met j vermenigvuldigt en daarna wordt deze uitkomtst % 8 gedaan. Mijn vraag is dan: wat is precies de voorwaarde waarop besloten wordt om een [SPATIE] of een '*' aan res toe te voegen. Stel dat i=1 en j=12, dan krijg je 1*12=12%8=4. Ik zie niet dat er iets met die 4 (of een andere waarde) gedaan wordt. Kan iemand mij dit uitleggen?

Groet,

Anton
 
Laatst bewerkt:
De regel
Code:
res += (i * j) % 8 ? ' ' : '*';
is gelijk aan
Code:
if ((i * j) % 8)
{
  res += ' ';
}
else
{
  res += '*';
}

De voorwaarde is dus of (i * j) % 8 "waar" is. Bij een computer is de waarde 0 "onwaar" (false) en elke andere waarde "waar" (true). Als (i * j) % 8 dus 0 oplevert (als i * j een achtvoud is) is de conditie false en wordt er dus een * toegevoegd. Als i * j geen achtvoud is, een spatie.
 
Ik snap hem. Er wordt gewoon op true/fals geevalueerd. Dat staat er natuurlijk nooit expliciet bij. Op dat punt raakte ik dus een beetje in de war. Met jouw uitleg zie ik hem. Bedankt!

Groet,

Anton
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan