• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fehler im Buch oder meinen Gedanken?

Status
Für weitere Antworten geschlossen.

Loon3y

Neues Mitglied
Hallo,

ich lese mir momentan ein Buch über JS durch. Dabei bin ich auf folgendes gestoßen: (ist noch weit am anfang)

Will man eine Variable um einen bestimmten Wert erhöhen, kann man sich des folgenden Konstrukts bedienen:

Code:
AnzahlAuflagen = AnzahlAuflagen + 1;
Der Variablen AnzahlAuflagen wird als Wert der alte Wert dieser Variablen plus fünf zugewiesen. Der Wert der Variablen wird also de facto um eins erhöht. In der Praxis kommt es sehr häufig vor, dass der Wert einer Variablen um genau eins erhöht oder verringert werden soll; für diesen Fall sieht JavaScript eine Abkürzung vor:

AnzahlAuflagen++ erhöht den Wert der Variablen um eins.

AnzahlAuflagen-- verringert den Wert der Variablen um eins

Die Operatoren ++ und -- können auch direkt vor dem Variablennamen stehen. Der Unterschied liegt in der Reihenfolge, in der diese Operation im Vergleich mit anderen Operationen ausgeführt werden soll.

Am Beispiel des Operators ++ soll das einmal durchexerziert werden; -- verhält sich analog.

Das Endergebnis des Standalone-Ausdrucks (des »alleinstehenden« Ausdrucks)

Code:
AnzahlAuflagen++;
hat zunächst denselben Effekt (nämlich: Erhöhung um 1) wie
Code:
 ++AnzahlAuflagen;
Einen Unterschied stellt man jedoch fest, wenn der Ausdruck bei einer Zuweisung verwendet wird:
Code:
 var Auflagen = 7;
var Anzahl = ++AnzahlAuflagen;
var Anzahl2 = AnzahlAuflagen++;
Welchen Wert hat Anzahl, welchen Wert hat Anzahl2?

Die (vielleicht etwas überraschende) Antwort lautet: Anzahl hat den Wert 8, Anzahl2 hat auch den Wert 8.

Betrachten Sie zunächst die zweite Zeile:
Code:
var Anzahl = ++AnzahlAuflagen;
Der ++-Operator steht vor dem Variablennamen. Das bedeutet hier, dass zunächst diese Operation (AnzahlAuflagen um eins erhöhen) ausgeführt und dann der neue Wert (8) der Variablen Anzahl zugewiesen wird.

Bei der dritten Zeile ist es genau andersherum:

Code:
var Anzahl2 = AnzahlAuflagen++;
Zuerst wird der Variablen Anzahl2 der (aktuelle) Wert von AnzahlAuflagen zugewiesen, dann wird der Wert von AnzahlAuflagen um eins vergrößert.
so jetzt frage ich mich woher bekommt man bei
Code:
var Auflagen = 7;
var Anzahl = ++AnzahlAuflagen;
var Anzahl2 = AnzahlAuflagen++;
den wert von "anzahlauflagen" her? Ich habe doch nur "Auflagen" mit 7 definiert, nicht "anzahlauflagen".

müsste das nicht

Code:
var Auflagen = 7;
var Anzahl = ++Auflagen;
var Anzahl2 = Auflagen++;
heißen?

Danke schon einmal für die Antwort.

Gruß
Loon3y
 
Mit diesem Textausschnitt hast Du recht.
Ich denke, das ist nur ein Druckfehler. Warum sollte jemand "Anzahl" definieren und es dann im Beispiel nicht benutzen?
 
Mit diesem Textausschnitt hast Du recht.
Ich denke, das ist nur ein Druckfehler. Warum sollte jemand "Anzahl" definieren und es dann im Beispiel nicht benutzen?


Das ist jetzt schon das dritte Buch wo ich anfange und wo gleich in den ersten paar Abschnitten solche fehler drin hat! Gibs denn mal ein Buch / E-Book welches nicht so fehlerhaft ist? Wie soll man sein Wissen erweitern wenn einem sowas vor die füße geworfen wurde? Hab mir den kompletten Abschnitt mit rechnen bei js mehrfach durchgelesen und hab mich schon für "dumm" erklärt weil ichs nicht verstehe..

Edit: genauso versteh ich nicht wieso er folgendes erklärt (mit eigenen worten wiedergegeben):

Eine Textzeile die nicht angezeigt werden soll, sprich eine art kommentar wird mit "//" angefangen

also

// ich werde nicht angezeigt

mehrere Textzeilen schreibt er dann so:

// ich bin zeile 1
// ich bin zeile 2

wieso schreibt er aber nicht

/* ich bin zeile 1
und ich bin zeile 2 */

??

und dann noch....man kann via <script> ... </script> ja js direkt in einer html datei einbinden oder via einer externen .js datei einbinden. wenn man das erstere benutzt kann man innerhalb des scriptes noch <noscript> text </noscript> schreiben, welcher aucn dann angezeigt wird wenn js z.b. abgeschaltet ist. wie macht man dies aber wenn man eine externe datei einbinden? schreibt man das <noscript> text </noscript> dann in die externe datei rein?
 
Zuletzt bearbeitet:
Code:
var Auflagen = 7;
var Anzahl = ++Auflagen;
var Anzahl2 = Auflagen++;
Ist richtig. Das Beispiel ist dämlich, weil den den Unterschied gar nicht erklärt. Besser wäre folgendes:
Code:
var anzahl = 7;
alert(anzahl++); // 7
alert(anzahl);   // 8;
anzahl = 7;
alert(++anzahl); // 8
alert(anzahl);   // 8
 
Code:
var anzahl = 7;
alert(anzahl++); // 7
alert(anzahl);   // 8;
anzahl = 7;
alert(++anzahl); // 8
alert(anzahl);   // 8


sind die ersten beiden ergebnisse nicht vertauscht?

anzahl++ ist doch 8
und
anzahl ist doch 7 ?

habe bei meinen oberen beitrag noch 2 fragen reineditiert. hoffe es hat jemand gelesen, wenn nicht:

Edit: genauso versteh ich nicht wieso er folgendes erklärt (mit eigenen worten wiedergegeben):

Eine Textzeile die nicht angezeigt werden soll, sprich eine art kommentar wird mit "//" angefangen

also

// ich werde nicht angezeigt

mehrere Textzeilen schreibt er dann so:

// ich bin zeile 1
// ich bin zeile 2

wieso schreibt er aber nicht

/* ich bin zeile 1
und ich bin zeile 2 */

??

und dann noch....man kann via <script> ... </script> ja js direkt in einer html datei einbinden oder via einer externen .js datei einbinden. wenn man das erstere benutzt kann man innerhalb des scriptes noch <noscript> text </noscript> schreiben, welcher aucn dann angezeigt wird wenn js z.b. abgeschaltet ist. wie macht man dies aber wenn man eine externe datei einbinden? schreibt man das <noscript> text </noscript> dann in die externe datei rein?
 
sind die ersten beiden ergebnisse nicht vertauscht?
Nein, ist alles richtig.

anzahl++ ist doch 8
Aber zuerst wird anzahl ausgegeben (alert) und erst nachher um 1 erhöht (deswegen stehen die ++ HINTER der Variable).

anzahl ist doch 7 ?
Nein, zu dem Zeitpunkt wurde anzahl ja schon durch ++ um 1 erhöht. ++ speichert ja auch den neuen Wert in der Variablen.

mehrere Textzeilen schreibt er dann so:
// ich bin zeile 1
// ich bin zeile 2

wieso schreibt er aber nicht

/* ich bin zeile 1
und ich bin zeile 2 */

??
Weil er demonstrieren will, dass es auch mit // statt /* */ geht? Das ist manchmal einfacher.

wie macht man dies aber wenn man eine externe datei einbinden? schreibt man das <noscript> text </noscript> dann in die externe datei rein?
Gar nicht. Man schreibt es in die HTML-Datei. Es wird ausgeführt, wenn JS nicht aktiviert ist. Mit <script> hat das nichts zu tun, und ob das funktioniert, wenn es innerhalb <script> steht, würde ich bezweifeln.

Gruß,
-Efchen
 
Aber zuerst wird anzahl ausgegeben (alert) und erst nachher um 1 erhöht (deswegen stehen die ++ HINTER der Variable).

ok nun versteh ichs, denk ich ;) Dann war das beispiel wohl dennoch schlecht gewählt vom author.

würde es dann aber so aussehen wenn ich es weiterführe:

Code:
var anzahl= 7;
alert(anzahl++); //7
alert(anzahl++); //8
alert(anzahl); //9

oder wäre zeile drei dennoch 7?


Gar nicht. Man schreibt es in die HTML-Datei. Es wird ausgeführt, wenn JS nicht aktiviert ist. Mit <script> hat das nichts zu tun, und ob das funktioniert, wenn es innerhalb <script> steht, würde ich bezweifeln.

d.h. wenn ich das js via .js extern einbinde und dann über z.b. <span id="dasscript"> </span> aufrufe, gibt es keine möglichkeit einen kommentar zu hinterlassen wenn es nicht angezeigt wird (sprich wenn der browser es abgeschlatet hat oder nicht unterstützt) ? Gibt es hier eine andere möglichkeit es anzeigen zu lassen?
 
Warum führst du diese Scripte nicht einfach mal aus, um zu sehen was passiert? Entweder im Firebug oder via javascript:alert(1) in der Adressleiste.

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Arithmetic_Operators#.2b.2b_(Increment) schrieb:
This operator increments (adds one to) its operand and returns a value. If used postfix, with operator after operand (for example, x++), then it returns the value before incrementing. If used prefix with operator before operand (for example, ++x), then it returns the value after incrementing.

For example, if x is three, then the statement y = x++ sets y to 3 and increments x to 4. If x is 3, then the statement y = ++x increments x to 4 and sets y to 4.
--------------------------------------
<noscript> ist quasi obsolete geworden, da man aus Wartungsgründen <script> am besten in <head> steckt, wo <noscript> nicht erlaubt ist. Als (bessere) Alternative blendet man das DOM entsprechend aus, entweder indem man den Knoten löscht oder es per CSS ausblendet.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben