/ / Node JS-Komma-Zuweisung - Javascript, node.js

Knoten JS comma assignment - javascript, node.js

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 № 1

Es 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:

  1. VariableStatement ist definiert als:

    1. die Saite var gefolgt von einer VariableDeclarationList
  2. VariableDeclarationList ist definiert als:

    1. Variablendeklaration oder
    2. VariableDeclarationList, VariableDeclaration
      • Hinweis: Dies ist eine rekursive Definition. Grundsätzlich definiert es eine eine unendliche Liste von Variablendeklaration, Variablendeklaration, Variablendeklaration ...
  3. Variablendeklaration ist definiert als

    1. BindingIdentifier gefolgt von einem optionalen Initializer oder
    2. 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.