2016-06-28 3 views
0

Okay, hier ist eine Klasse mit einem Array mit sechs Elementen im Konstruktor.Warum scheinen eingebettete Klassenschleifen unterschiedlichen Zuordnungsregeln zu folgen?

class forLoopProblem { 

    constructor() { 
    this.a = [5,8,7,4,6,18]; 
    } 

Was ich tun möchte, ist die Länge des Arrays verwenden, um die Anzahl der Iterationen in der for Schleife unterhalb

iterate(ap1) { 
    for (i = 0; i <= this.a.length; i++) { 
     console.log(i); 
    } 
    } 
} 

var internalVar = new forLoopProblem(); 

Leider besagt internalVar.iterate() erzeugt eine Ausnahme zu begrenzen, dass a nicht definiert ist.

log() { 
    console.log(this.a.length); 
    console.log(this.a); 
    } 
} 

var internalVar = new forLoopProblem(); 

Aber wenn a nicht definiert ist, warum dann nicht internalVar.log() verhalten sich wie erwartet, 6 Druck zusammen mit dem Inhalt des Arrays auf der Konsole?

Zuerst dachte ich vielleicht 6 ist eine Zeichenfolge, die in eine ganze Zahl konvertiert werden muss, bevor die Schleife Zuordnung erkennt. Also habe ich versucht parseInt(), aber das hat nicht funktioniert. Und trotzdem sagt die Ausnahme, dass die Variable nicht definiert ist, also glaube ich nicht, dass es ein Parsing-Problem ist.

I kann sogar a verwenden, um die anfängliche Iterationsvariable bis 6 zuzuordnen, etwa so:

for (i = this.a.length; i <= 10; i++) { 

6, zu produzieren 7, 8, 9 und 10 als Konsolenausgang.

Also was gibt es mit der Limiter-Spezifikation?

+0

Bitte beheben Funktioniert * alle * die Fehler im Code, bevor es hier veröffentlichen. – Bergi

+0

Ich sehe nur einen, wo ich falsch geschrieben habe. Und solange es konsistent ist, sollte das egal sein. –

+0

'iterate',' interate', 'lenth' ... Und ich hoffe, dass die vergessene Deklaration der' i'-Variable ebenfalls ein Tippfehler ist. – Bergi

Antwort

1

Works für mich, obwohl ich hatte i in definieren, die for-Schleife:

JavaScript

class forLoopProblem { 
    constructor() { 
    this.a = [5,8,7,4,6,18]; 
    } 
    itterate(ap1) { 
    for (var i = 0; i <= this.a.length; i++) { 
     console.log(i); 
    } 
    } 
} 

var internalVar = new forLoopProblem(); 
internalVar.itterate(); //0, 1, 2, 3, 4, 5, 6 

in Getestet:

  • Chrome - Funktioniert
  • Firefox - Werke
  • Opera - Werke
  • IE10 - Funktioniert nicht
  • Safari (Win8) - nicht
+0

Das hat Danke funktioniert. Warum denkst du, dass das einen Unterschied macht? Ich habe es nie in anderen Situationen als Variable deklariert. –

+0

Vielleicht in ES6 'class' müssen Sie?(Einfach raten). – Arg0n

+0

[Klassen sind strict mode code] (http://stackoverflow.com/a/29285330/1048572), und wenn Sie [eine nicht deklarierte Variable zuweisen] (http://blog.niftysnippets.org/2008/03/horror -of-implicit-globals.html) das ist eine Ausnahme. Es sollte in der Fehlerkonsole angezeigt werden ([Beispiel] (http://stackoverflow.com/q/23549062/1048572)). – Bergi

Verwandte Themen