Vinzenz Mai: eine Frage der Sprachdefinition

Beitrag lesen

Hallo,

so aus neugier -

var i=5;
i=++i + ++i;

  

> was ergibt i in unterschiedlichen situtationen? von der Idee her 14,  
  
wie kommst Du darauf?  
  

> aber unter Opera11 in JS kriegt man 13.  
  
in Javascript erwarte ich 13, zumindest lese ich das so aus [Spezifikation von ECMAScript](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf), siehe Martins Argumentation:  
  
Wir haben eine einfach Zuweisung an eine Variable, somit wird das Ergebnis des Ausdrucks auf der rechten Seite zugewiesen. (11.13.1)  
  
Schauen wir uns die rechte Seite an:  
Wir haben eine Addition (11.6.1)  
(1) Zuerst wird der Ausdruck des ersten Summanden bewertet,  
(2) dann wird der Ausdruck des zweiten Summanden bewertet  
(3) Da es sich um zwei Zahlen handelt, ergibt sich die Summe gemäß 11.6.3  
  
(1) ist ein unärer Ausdruck (11.4) und wird gemäß 11.4.4 ausgewertet:  
dabei wird in Teilschritt 6 der um 1 erhöhte Wert (oldValue ist 5) in die Variable zurückgeschrieben, d.h. der erste Summand wird zu 6 ausgewertet.  
  
(2) ist ebenfalls ein unärer Ausdruck, oldValue ist 6, da (1) bereits ausgewertet wurde => der zweite Summand wird zu 7 ausgewertet.  
  
(3) Die Summe von 6 und 7 ist 13.  
  
=> von einer Javascript-Engine erwarte ich daher, dass 13 herauskommt.  
  

> was kriegt man unter anderen browsern,  
  
Ich erwarte und erhalte in allen von mir getesteten Browsern (Chrome, Firefox, IE, Opera, Safari) 13.  
  

> programmiersprachen etc.?  
  
In C: Undefiniertes Verhalten, siehe <http://c-faq.com/expr/seqpoints.html>.  
  
  
Freundliche Grüße  
  
Vinzenz