2013-03-18 8 views
48

den folgenden CodeVerwendung von Kommas im Vergleich zu Semikola in JavaScript?

var fn = function() { 
    var x = 'x', 
    y = 'y'; 
    this.a = 'a', 
    this.b = 'b', 
    this.c = 'c'; 
    this.d = 'd', 
    this.e = 'e'; 
} 

Sie können Gegeben sehen, dass es eine Mischung aus beidem ist.
Was wäre der Vorteil der Verwendung des einen oder anderen?

Mein Verständnis ist, dass das Semikolon die Anweisung beenden soll. Und Komma sollte verwendet werden, um mehrere Deklarationen aneinander zu reihen.

Also ist es sicher zu sagen, dass bei diesem Beispiel dann nur zwei Semikolon sein sollten?

var fn = function() { 
    var x = 'x', 
    y = 'y'; 
    this.a = 'a', 
    this.b = 'b', 
    this.c = 'c', 
    this.d = 'd', 
    this.e = 'e'; 
} 
+0

@SteveValliere, mit Ausnahme dieser Frage geht es nicht um Java. –

+1

@SteveValliere dies war eine Javascript-Frage. Die Syntax wäre ungültig java –

+0

Hinweis als Endline-Token, sie sind nicht immer gleichwertig. Dieser Ausschnitt: 'var a = 1, b = 2 'deklariert 2 Variablen mit einer var-Anweisung. Aber in 'var a = 1; b = 2 'ist nun' b 'nicht mehr Teil der var-Anweisung und erzeugt ein implizites globales' b '. –

Antwort

62

der Komma-Operator ist ein Operator, der innerhalb eines Ausdrucks verwendet werden können. Es wird verwendet, um mehrere verschiedene Ausdrücke zu trennen und hat die Bedeutung "Alle folgenden Ausdrücke auswerten und dann den Wert des letzten Ausdrucks erzeugen." Zum Beispiel:

a = 1, b = 2, c = 3 

bedeutet „bewerten a = 1, dann b = 2, dann c = 3 bewertet dann auf den Wert des Ausdrucks c = 3

Das Semikolon ist kein Operator und nicht in einem Ausdruck verwendet werden kann es.. wird als Teil der JavaScript-Syntax verwendet, um das Ende eines Ausdrucks zu markieren, die als Aussage behandelt wird. zum Beispiel könnten Sie

a = 1; b = 2; c = 3; 

sagen Und das würde bedeuten, „es gibt thr ee-Anweisungen in der Reihenfolge: werte den ersten Ausdruck als erste Anweisung, den zweiten Ausdruck als zweite Anweisung und den dritten Ausdruck als dritte Anweisung aus. "

In dieser Hinsicht sind die beiden nicht vollständig austauschbar. Zum Beispiel können Sie nicht

var a = 1, var b = 2; 

Da var a = 1 und var b = 2 Aussagen sind keine Ausdrücke, schreiben und somit nicht durch ein Komma getrennt werden können. Sie müssten hier ein Semikolon verwenden.

(Ein Hinweis: Könnten Sie

var a = 1, b = 2; 

sagen, weil die Sprache, die speziell diese Verwendung von Komma als Teil der Syntax einer Deklarationsanweisung erlaubt Hier Komma nicht als Operator verwendet wird..)

Ebenso können Sie nicht

a = (b = 1; c = 2); 

sagen, weil hier die rechte Seite des Ausdrucks muss ein Ausdruck sein, keine Aussage, und ; zu s verwendet wird, getrennte Aussagen. Das innere Semikolon müsste stattdessen ein Komma sein. (Andererseits ist dieser Code in erster Linie ziemlich umständlich und ungewöhnlich, also sollten Sie das wahrscheinlich gar nicht machen!)

Aus stilistischer Sicht wird der Komma-Operator selten benutzt und ist obskur genug stolpere ziemlich kompetente JavaScript-Programmierer. Daher würde ich dringend empfehlen, es nicht zu verwenden und statt dessen die bekannten Konventionen in JavaScript zu verwenden, Semikolons zu verwenden, um Anweisungen zu terminieren, selbst wenn es äquivalent und syntaktisch zulässig wäre, Kommas zu verwenden, um Ausdrücke voneinander zu trennen.

Hoffe, das hilft!

+37

Wie ist es möglich? Schreibe das alles in 5 Minuten? 'O_O' – VisioN

+0

@ VisioN, drei, als ich es sah ... – gdoron

9

Es ist wirklich egal. Es gibt keinen Geschwindigkeitsvorteil für die Verwendung von Kommas, soweit ich weiß.

Verwenden Sie einfach, was Sie bevorzugen :)

Dies ist, was JavaScript - The Good Parts zu sagen hat:

Der Komma-Operator zu übermäßig schwierige Ausdrücke führen kann. Es kann auch einige Programmierfehler maskieren.

JSLint erwartet das Komma als Trennelement verwendet, um zu sehen, aber nicht als Operator (mit Ausnahme der Initialisierung und Inkrementierung Teilen der für Anweisung). Es wird nicht erwartet, Elemente im Array Literale zu sehen. Zusätzliche Kommas sollten nicht verwendet werden. Ein Komma sollte nach dem letzten Element eines Array-Literals oder Objektliterals nicht angezeigt werden, da es von einigen Browsern falsch interpretiert werden kann.

4

Es ist am besten, immer mit Konventionen konsistent zu bleiben. Es sind entweder alle Semikolons oder alle Kommas, und ich bin mir sicher, dass Sie lieber Semikolons anstelle von Kommas verwenden möchten.

Es gibt auch keine Geschwindigkeitszunahme, also brauchen Sie sich keine Sorgen zu machen.

26

Nein, Komma hat drei Bedeutungen.

  1. Mit variablen Deklarationen lassen Sie einfach die var vor jeder Variablen weglassen.
  2. Mit Ausdrücken, "Der Komma-Operator wertet seine beiden Operanden (von links nach rechts) aus und gibt den Wert des zweiten Operanden zurück."
  3. Separate Argumente in Funktionsdeklarationen und Funktionsaufrufen, aber das sollte für jeden Programmierer offensichtlich sein.

Beispiel für zwei;

alert((2,3)); //3 

Beachten Sie, dass das Komma in der var-Anweisung ist nicht der Komma-Operator, weil es nicht innerhalb eines Ausdrucks nicht existiert. Vielmehr ist es ein Sonderzeichen in var-Anweisungen, mehrere davon zu einem zu kombinieren. Praktisch verhält sich das Komma jedoch fast genauso wie der Komma-Operator.

MDN

When is the comma operator useful?

+2

3. Trennen Sie Argumente in Funktionsdeklarationen und Funktionsaufrufen. – VisioN

+0

@VisioN, hinzugefügt, obwohl es offensichtlich ist ... – gdoron

+0

Ja, aber das ist noch die dritte Bedeutung. – VisioN

Verwandte Themen