Sind nachgestellte Kommas in JavaScript Standard oder tolerieren die meisten Browser wie Chrome und Firefox diese nur?
Ich dachte, sie wären Standard, aber IE8 hat gekotzt, nachdem er auf einen gestoßen ist - natürlich bedeutet IE, der etwas nicht unterstützt, kaum, dass es nicht Standard ist.
Hier ist ein Beispiel dafür, was ich meine (nach dem letzten Element des Bücher-Arrays):
var viewModel = {
books: ko.observableArray([
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } },
{ title: "..", display: function() { return ".."; } }, // <--right there
]),
currentTemplate: ko.observable("bookTemplate1"),
displayTemplate: function() { return viewModel.currentTemplate(); }
};
javascript
Adam Rackis
quelle
quelle
Antworten:
Technische Daten: ECMAScript 5 und ECMAScript 3
Abschnitt 11.1.5 in der ECMAScript 5-Spezifikation:
Also ja, es ist Teil der Spezifikation.
Update: Anscheinend ist dies neu in ES5. In ES3 (Seite 41) lautete die Definition nur:
Für Arrays-Literale ( Abschnitt 11.1.4 ) ist es noch interessanter ( Update: Dies gab es bereits in ES3):
(Wo
Elision_opt
ist Elision opt , was bedeutet, dass Elision optional ist?)Elision
ist definiert alsAlso, ein Array wörtlich wie
ist vollkommen legal. Dadurch wird ein Array mit zwei Elementen erstellt, die Array-Länge wird jedoch auf festgelegt
2 + 3 = 5
.Erwarten Sie nicht zu viel vom IE (vor IE9) ...
quelle
Nur eine kurze Erinnerung / Warnung, dass dies einer der Bereiche ist, in denen sich der JavaScript / ECMAScript-Standard und der JSON-Standard unterscheiden. Hinter Kommas sind gültig in JS aber nicht gültig in JSON.
quelle
Was noch lustiger ist, gibt IE7
während Firefox und Chrome
quelle
[1,,].length
gibt2
. Sinn : Browser machen keine.Die Spezifikation für Javascript (auch bekannt als ECMA Script) finden Sie hier . Die relevante Definition für Arrays finden Sie auf Seite 63 und, wie Felix bemerkte, die Objektdefinition einige Seiten später auf Seite 65.
Obwohl diese Spezifikation besagt, dass es in Ordnung ist, ein Trailing zu
,
haben, weiß ich nicht, ob dies im Rückblick auf einige Versionen der Fall wäre. Wie Sie bereits bemerkt haben, wird sich IE8- selbst bescheißen, wenn Sie ein nachfolgendes Komma hinterlassen, Chrome und FF jedoch gut damit umgehen.quelle
Lassen Sie uns das aufschlüsseln.
Ja. Ab der ECMAScript 5-Spezifikation (auch Teil des Google- und Airbnb-Styleguides)
Dies ist eine ECMAScript 5-Unterstützungsfrage.
Transpiler wie Babel entfernen das zusätzliche nachgestellte Komma im transpilierten Code, sodass Sie sich in älteren Browsern keine Gedanken über das nachfolgende Komma machen müssen.
Das bedeutet also:
Wenn Sie also ES5 oder höher verwenden, müssen Sie sich wahrscheinlich keine Sorgen machen.
Auch dies ist eine Support-Frage zu ECMAScript 5. IE8 unterstützt ECMAScript 5 nicht (nur IE9 und höher)
Ich würde Airbnbs veraltete ES5-Dokumentation https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas wärmstens empfehlen
Ich würde auch die Mozilla-Dokumente empfehlen:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
quelle
Auf Chrome 52:
Ich mag es einfach nicht, Kommas zu setzen. Normalerweise werden sie in Open Source-Projekten verwendet, um zu vermeiden, dass die von einem anderen Commiter geschriebene Zeile gelöscht wird. Siehe die gleiche Frage in Python: https://stackoverflow.com/a/11597911/968988
quelle
[1,]
: Es steht eindeutig etwas vor dem Komma. Aber[,]
da drin ist so viel vor und nach dem Komma. Da ich[,]
allein nicht verstehe , halte ich die Verwendung nicht für[1,]
eine gute Idee.