Hallo,
Ja klar. Ausgehend von der Prämisse, dass 0 = _nichts_ und damit _false_ ist, ergibt !n bei n = 0 natürlich true.
das ist _eine_ Sichtweise.
Man kann aber auch ähnlich wie in C an die Sache herangehen, dass jeder Wert, der numerisch 0 ist, auch als false gilt, und jeder Wert, der numerisch unglich 0 ist, als true. Und so wird es in Javascript im Prinzip auch gehandhabt, auch wenn durch die automatische Typumwandlung ein paar Stolpersteine im Weg liegen.
Gerade deswegen funktionieren ja die "eleganten" Schreibweisen wie etwa diese:
if (x%3) ...
Nach deiner Argumentation ergäbe sich hier immer true, die Berechnung x%3 ergibt ja einen konkreten Wert, also nicht "nichts".
Tatsächlich ergibt sich aber ein Wert ungleich 0, wenn x nicht durch 3 teilbar ist, dann gilt der Ausdruck als true und die Bedingung als erfüllt; und der Wert 0, wenn x durch 3 teilbar ist, dann gilt der Ausdruck als false und die Bedingung als nicht erfüllt.
Wenn man aber davon ausgeht, dass 0 nicht _nichts_ ist, sondern einen Wert darstellt, nämlich 0, dann würde !n bei n = 0 false ergeben.
Und das wäre _dann_ auch das gewünschte Ergebnis, wenn die Fragestellung nicht lautet:
Ist der Wert true oder false? - Sondern wenn die Frage ist, ob überhaupt ein Wert angegeben wurde.
Was du erwartest oder forderst, ist also eher ein Test auf Existenz, ähnlich dem Test mit isset() in PHP. Das hat Javascript aber in der Form AFAIK nicht.
So long,
Martin
Idealismus wächst mit der Entfernung zum Problem.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(