Ich habe gelesen Blogeintrag und stieß auf den folgenden Code-Ausschnitt:
var fs = require("fs"),
filenames,
i,
processId;
filenames = fs.readdirSync(".");
for (i = 0; i < filenames.length; i++) {
console.log(filenames[i]);
}
console.log("Ready.");
processId = process.getuid();
Ich bin neugierig auf:
var fs = require("fs"),
filenames,
i,
processId;
Ist dies ein Beispiel für den Kommaoperator:
Der Kommaoperator wertet seine beiden Operanden aus (von links nach rechts) und gibt den Wert des zweiten Operanden zurück.
Wenn dem so ist, scheiße ich immer noch nicht, was los ist. Stimmt die folgende Aussage mit dem Schreiben von etwas überein:
var fs = require("fs")
var filenames;
var i;
var processId;
Wäre folgendes gültig:
var foo = require("./foo.js"),
bar = require("./bar.js"),
baz = require("./baz.js"),
input = "some string",
i,j,k;
Und zu bewerten:
var foo = require("./foo.js"),
var bar = require("./bar.js");
var baz = require("./baz.js");
var input = "some string";
var i;
var j;
var k;
Antworten:
3 für die Antwort № 1Es ist nicht der Kommaoperator. Das Komma ist Teil der Syntax für var
Stichwort. Das var
Schlüsselwort wird angegeben, um eine Liste von durch Kommas getrennten Variablen zu erhalten.
Diese Funktion heißt a VariableDeclarationList
in der Spezifikation: http://www.ecma-international.org/ecma-262/7.0/index.html#sec-variable-statement
Das var
Die Schlüsselwortsyntax wird angegeben als:
Syntax
VariableStatement[Yield]:
var VariableDeclarationList[In, ?Yield];
VariableDeclarationList[In, Yield]:
VariableDeclaration[?In, ?Yield]
VariableDeclarationList[?In, ?Yield], VariableDeclaration[?In, ?Yield]
VariableDeclaration[In, Yield]:
BindingIdentifier[?Yield] Initializer[?In, ?Yield]opt
BindingPattern[?Yield] Initializer[?In, ?Yield]
Wenn Sie mit der BNF- oder RBNF-Notation nicht vertraut sind. Die obige Spezifikation bedeutet:
VariableStatement ist definiert als:
- die Saite
var
gefolgt von einer VariableDeclarationList
- die Saite
VariableDeclarationList ist definiert als:
- Variablendeklaration oder
- VariableDeclarationList, VariableDeclaration
- Hinweis: Dies ist eine rekursive Definition. Grundsätzlich definiert es eine eine unendliche Liste von Variablendeklaration, Variablendeklaration, Variablendeklaration ...
Variablendeklaration ist definiert als
- BindingIdentifier gefolgt von einem optionalen Initializer oder
- BindingPattern gefolgt von einem Initialisierer
- Anmerkung: Diese BindingPattern-Definition gilt für die neue ES6-Destrukturierungszuordnung ([a, b, c] = ...)
Die Definitionen für BindingIdentifier
, BindingPattern
und Initializer
sind an anderer Stelle in der Spezifikation angegeben.
Die Definition von BindingIdentifier
ist im Grunde ein Variablenname. Also gültig BindingIdentifiers
sind Dinge wie hello
oder x
oder y2
aber nicht for
(weil es ein Stichwort ist) oder 1k
(weil es mit einer Nummer beginnt).
Ich werde die Definition von ignorieren BindingPattern
Im Moment ist es nicht unbedingt notwendig, die Definition der Variablenliste zu verstehen.
Die Definition von Initializer
ist das Symbol =
gefolgt von einem Ausdruck. Grundsätzlich gilt =
gefolgt von einem beliebigen Javascript-Code.
Also, a VariableDeclaration
(Nicht der var
Keyword (nur ein Teil davon) wird einfach definiert als:
anyVariableName = anything
oder
anyVariableName // remember, Initializer is optional
Und das var
Schlüsselwort ist definiert als:
var VariableDeclaration
oder
var VariableDeclaration, VariableDeclaration, VariableDeclaration ...
So. Gültige Beispiele für die var
Schlüsselwortsyntax include
var x;
var x = 12;
var x,
y = "hello",
z;
var x = 0,
y,
z=100;
etc.
Wenn wir die BindingPattern
Definition dann gültige Beispiele für die var
Die Schlüsselwortsyntax umfasst auch:
var x=10,
[a,b,c] = [100,200,300],
i,
j;
var {x,y,z} = {x:10,y:20,z:30},
a = 2,
b,
c,
[i,j,k]=["hello","cruel","world"];
Zusätzliche Bemerkungen:
Beachten Sie, dass VariableDeclaration
kann auch ohne das passieren var
Stichwort. Zum Beispiel:
a = 40; // if this is the first time a is defined then it is
// automatically created as a global variable
In diesem Fall gibt es keine var
Schlüsselwort, jedes Komma wäre nicht Teil des var
Syntax. Was bedeutet das ohne var
Stichwort das Komma ist ein Komma-Operator:
a = 10, b = 50; // comma operator
0 für die Antwort № 2
Nein, es ist kein Kommaoperator.
var a="1,2,3", b=[1,2,3]; // No comma operators in this line
if (a == b)
alert("Yes"), a = null; // Comma operator
if (a += 10, b) // Comma operator
b[1,2] = a; // Comma operator
a = (1,2,b[3]); // Comma operator
Komma rein var
Die Anweisung trennt die verschiedenen Variablen, also entspricht sie mehreren Variablen.