Wann sollten doppelte oder einfache Anführungszeichen in JavaScript verwendet werden?


1968

console.log("double"); vs. console.log('single');

Ich sehe immer mehr JavaScript-Bibliotheken, die beim Umgang mit Zeichenfolgen einfache Anführungszeichen verwenden. Was sind die Gründe, einen über den anderen zu verwenden? Ich dachte, sie sind ziemlich austauschbar.


125
was ist leichter zu lesen? alert ("Es ist Spielzeit"); oder Alarm ('Es ist Spielzeit');
Ryan Miller

591
Wie wäre es mit diesem Ryan? alert("It's \"game\" time.");oder alert('It\'s "game" time.');?
Francisc

37
Wenn immer einfache Anführungszeichen verwendet werden und gelegentlich doppelte Anführungszeichen, bei denen das Literal einfache Anführungszeichen enthält, müssen wir weit weniger Umschalttasten eingeben, und unser linker kleiner Finger gibt uns Segen. Aber ja, wie @arne sagte, sollte für JSON ein doppeltes Anführungszeichen verwendet werden.
IsmailS

9
Ein einfaches Anführungszeichen ist einfacher, wenn Sie sich auf einer europäischen Tastatur befinden (doppeltes Anführungszeichen ist Umschalt + 2, was nicht so süß ist, wie wenn Sie bequem mit dem rechten kleinen Finger auf eine einzelne Taste tippen).
Arne

38
@Arne Es gibt keine "europäische Tastatur". Zum Beispiel erfordert die deutsche Tastatur eine Verschiebung für beide Arten von Anführungszeichen. (Aber einfache Anführungszeichen sind einfacher.)
ANeves

Antworten:


1222

Der wahrscheinlichste Grund für die Verwendung von Single vs Double in verschiedenen Bibliotheken ist die Präferenz des Programmierers und / oder die API-Konsistenz. Verwenden Sie nicht nur konsistent, sondern auch das, was am besten zur Saite passt.

Verwenden der anderen Art von Zitat als Literal:

alert('Say "Hello"');
alert("Say 'Hello'");

Dies kann kompliziert werden:

alert("It's \"game\" time.");
alert('It\'s "game" time.');

Eine weitere neue Option in ES6 sind Vorlagenliterale, die das back-tickZeichen verwenden:

alert(`Use "double" and 'single' quotes in the same string`);
alert(`Escape the \` back-tick character and the \${ dollar-brace sequence in a string`);

Vorlagenliterale bieten eine saubere Syntax für: variable Interpolation, mehrzeilige Zeichenfolgen und mehr.

Beachten Sie, dass JSON formal so angegeben ist, dass doppelte Anführungszeichen verwendet werden. Dies kann je nach Systemanforderungen eine Überlegung wert sein.


84
Ein wichtiger Punkt, den Sie bei allen Codekonventionen beachten sollten: Definieren Sie ihn einmal und bleiben Sie dabei. IOW, verwenden Sie keine doppelten Anführungszeichen irgendwo und einfache Anführungszeichen anderswo.
Cerebrus

170
@Cerebrus - Ich denke, Flexibilität ist mit diesem in Ordnung. Wählen Sie sicher einen bevorzugten Stil, aber wenn Sie sich vom Stil lösen müssen, um zu verhindern, dass viele Anführungszeichen in einer Zeichenfolge angezeigt werden. Damit wäre ich einverstanden.
Martin Clarke

5
Ich glaube nicht, dass es einen Grund gibt, konsequent zu sein. Beides hat keinen Vorteil, und ich glaube nicht, dass die Lesbarkeit wirklich beeinträchtigt wird, unabhängig davon, ob Sie "an einem Ort" und "an einem anderen" verwenden.
cdmckay

2
@ Olly Hicks, interessanter Test !! Einfache Anführungszeichen sind hier in Chrome 13 (OSX) um ein Vielfaches schneller als doppelte Anführungszeichen. Interessant ...
Ricket

12
Ein wenig abseits des Themas, aber wenn die Leute die richtige Typografie verwenden würden, wären viele dieser Diskussionen über das Entkommen überholt: alert('It’s “game” time')vs. alert("It’s “game” time")- spielt keine Rolle. Sie würden nur in den (seltenen) Fällen entkommen muß , wo die Einzel- oder Doppel prime Zeichen ', "tatsächlich geeignet sind.
Jotaen

617

Wenn Sie mit JSON arbeiten, sollte beachtet werden, dass JSON-Zeichenfolgen genau genommen in doppelte Anführungszeichen gesetzt werden müssen. Sicher, viele Bibliotheken unterstützen auch einfache Anführungszeichen, aber ich hatte große Probleme in einem meiner Projekte, bevor mir klar wurde, dass das einfache Anführungszeichen einer Zeichenfolge tatsächlich nicht den JSON-Standards entspricht.


5
Dies ist sehr relevant, wenn Sie mit jQuery.ajax arbeiten, um einen ASP.NET-Dienst (Webdienst, Seitenmethode oder MVC) aufzurufen.
Schmuli

100
Die Eigenschaftsnamen in den JSON-Zeichenfolgen müssen in doppelte Anführungszeichen gesetzt werden, aber eine JSON-Zeichenfolge als Ganzes kann in einfache Anführungszeichen gesetzt werden: var jsonString = '{"key1":"value1"}';(Ich empfehle nicht, JSON manuell zu
erstellen

51
Sie sollten JSON nicht von Hand schreiben, wenn Sie können .stringify().
Camilo Martin

23
Dies hier ist das beste Argument, um immer doppelte Anführungszeichen zu verwenden. JSON sollte doppelte Anführungszeichen haben. Die anderen Antworten geben meistens den Rat, "konsistent" zu sein. Wenn also ein Teil der Sprache ein doppeltes Anführungszeichen realistisch erzwingen könnte, sollten Sie dieses doppelte Anführungszeichen konsequent verwenden.
Josh von Qaribou

18
Dies ist auch relevant, wenn Sie mit mehreren Sprachen arbeiten, in denen fast alle anderen Sprachen (Java, C, C ++, ...) doppelte Anführungszeichen für Zeichenfolgen und einfache Anführungszeichen für Zeichen verwenden. Ich bevorzuge es, überall das gleiche Zitat zu verwenden und mich daher an doppelte Anführungszeichen für JS zu halten. Bei jahrelanger Berührung ist die zusätzliche Taste zum Verschieben für doppelte Anführungszeichen völlig irrelevant. Wenn Ihre Codierung durch das Tippen eingeschränkt wird, müssen Sie das Tippen richtig üben.
Lawrence Dol

336

Es gibt keine bessere Lösung ; Ich möchte jedoch argumentieren, dass doppelte Anführungszeichen manchmal wünschenswerter sein können:

  • Neulinge sind bereits mit doppelten Anführungszeichen aus ihrer Sprache vertraut . Im Englischen müssen wir doppelte Anführungszeichen verwenden ", um eine Passage des zitierten Textes zu identifizieren. Wenn wir ein einzelnes Zitat verwenden ', kann der Leser es als Kontraktion falsch interpretieren. Die andere Bedeutung einer Textpassage, die von der umgeben ist, 'gibt die umgangssprachliche Bedeutung an. Es ist sinnvoll, mit bereits vorhandenen Sprachen konsistent zu bleiben, und dies kann wahrscheinlich das Lernen und Interpretieren von Code erleichtern.
  • Doppelte Anführungszeichen eliminieren die Notwendigkeit, Apostrophen zu entkommen (wie bei Kontraktionen). Betrachten Sie die Zeichenfolge : "I'm going to the mall", im Vergleich zur ansonsten maskierten Version : 'I\'m going to the mall'.
  • Doppelte Anführungszeichen bedeuten eine Zeichenfolge in vielen anderen Sprachen . Wenn Sie eine neue Sprache wie Java oder C lernen, werden immer doppelte Anführungszeichen verwendet. In Ruby, PHP und Perl implizieren Zeichenfolgen in einfachen Anführungszeichen keine Backslash-Escapezeichen, während doppelte Anführungszeichen sie unterstützen.

  • Die JSON-Notation wird in doppelte Anführungszeichen gesetzt.

Dennoch ist es, wie andere gesagt haben, am wichtigsten, konsequent zu bleiben.


Ihr erster Punkt zur englischen Sprache ist nicht immer richtig und kann sich je nach Ort / Hauskonvention ändern. Drucksachen verwenden normalerweise einfache Anführungszeichen für Sprache und andere Formatierungen für große Blöcke mit zitiertem Text. Ihre umgangssprachliche Bedeutung ist keine nützliche Definition von Zitaten zur Hervorhebung. Außerdem sind englische Benutzer im Allgemeinen sehr arm an Anführungszeichen und Apostrophen.
John Ferguson

2
@ JohnFerguson, allein aus diesem Grund kann es wünschenswert sein, doppelte Anführungszeichen zu verwenden, um diese Unterscheidung zu treffen (zwischen Apostrophen und zitierten Passagen).
user1429980

Mir geht es nur um Pragmatismus. Aufgrund der Tatsache, dass 1 von 100 Zeichenfolgen, die ich eingebe oder verwende, doppelte Anführungszeichen enthält und viele, viele weitere Apostrophe haben, verwende ich doppelte Zeichenfolgen. Am Ende des Tages sollten Sie jedoch den Anführungszeichen-Typ verwenden, der 1) bereits im Projekt verwendet wird, wenn Sie ein neuer Entwickler des Projekts sind, oder 2) den, den Sie für sinnvoller halten.
Dudewad

Ein typisches Beispiel: Was ich gerade eingegeben habe (es gibt mehrere Apostrophe, keine doppelten Anführungszeichen;)
Dudewad

FWIW - dies ist ein Zitat aus einem Quora-Artikel: quora.com/…
theUtherSide

118

Abschnitt 7.8.4 der Spezifikation beschreibt die Literal-String-Notation. Der einzige Unterschied besteht darin, dass DoubleStringCharacter "SourceCharacter, aber kein doppeltes Anführungszeichen" und SingleStringCharacter "SourceCharacter, aber kein einfaches Anführungszeichen" ist. Der einzige Unterschied kann also folgendermaßen nachgewiesen werden:

'A string that\'s single quoted'

"A string that's double quoted"

Es hängt also davon ab, wie viel Zitat Sie tun möchten. Dies gilt natürlich auch für doppelte Anführungszeichen in doppelten Anführungszeichen.


@Gareth: Ich habe jedoch nicht über Spezifikationen gesprochen, sondern über mögliche Auswirkungen auf die Leistung. stackoverflow.com/questions/242813/…
Mathias Bynens

Wenn Sie genügend Apostrophe in Ihren Code einfügen, um auszugleichen, wie oft Sie Shift + 'drücken müssen, machen Sie es falsch.
SgtPooki

1
Was ist mit "{\"name\": \"Peter\"}"vs '{"name": "Peter"}'? Zugegeben, Sie könnten sagen, dass dies der gleiche Unterschied ist, aber es würde Ihre Entscheidung sicherlich anders beeinflussen als im obigen Beispiel.
Trevor

@MathiasBynens - Das ist eine interessante Beobachtung, die seit mindestens einem Jahr und vielleicht bis zu 6 Jahren nicht mehr relevant war.
ArtOfWarfare

4
Man sollte U + 2019 für ein Apostroph verwenden, nicht für ein vertikales einfaches Anführungszeichen
jjg

95

Einzelzitate

Ich wünschte, doppelte Anführungszeichen wären der Standard, weil sie etwas sinnvoller sind , aber ich verwende weiterhin einfache Anführungszeichen, weil sie die Szene dominieren.

Einzelzitate:

Keine Präferenz:

Anführungszeichen:


7
Crockford bevorzugt jetzt doppelte Anführungszeichen.
Adam Calvet Bohl

6
Airbnb bevorzugt jetzt doppelte Anführungszeichen
Suraj Jain

15
@ SurajJain Quelle? Airbnb- und Google- Styleguides listen weiterhin einzelne als bevorzugt auf.
Alec Mev

5
@SurajJain Ah, dies sind in JSON geschriebene Konfigurationen für die Überprüfung des Codestils, die überhaupt keine einfachen Anführungszeichen zulassen. Das Lesen ist eine gute Möglichkeit, die von verschiedenen Projekten getroffenen Entscheidungen zu vergleichen.
Alec Mev

2
Google bevorzugt jetzt einfache Anführungszeichen
GabrielOshiro

57

Ich möchte sagen, dass der Unterschied rein stilistisch ist, aber ich habe wirklich meine Zweifel. Betrachten Sie das folgende Beispiel:

/*
   Add trim() functionality to JavaScript...
    1. By extending the String prototype
    2. By creating a 'stand-alone' function
   This is just to demonstrate results are the same in both cases.
*/

// Extend the String prototype with a trim() method
String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/g, '');
};

// 'Stand-alone' trim() function
function trim(str) {
 return str.replace(/^\s+|\s+$/g, '');
};

document.writeln(String.prototype.trim);
document.writeln(trim);

In Safari, Chrome, Opera und Internet Explorer (getestet in IE7 und IE8) wird Folgendes zurückgegeben:

function () {
 return this.replace(/^\s+|\s+$/g, '');
}
function trim(str) {
 return str.replace(/^\s+|\s+$/g, '');
}

Firefox liefert jedoch ein etwas anderes Ergebnis:

function () {
    return this.replace(/^\s+|\s+$/g, "");
}
function trim(str) {
    return str.replace(/^\s+|\s+$/g, "");
}

Die einfachen Anführungszeichen wurden durch doppelte Anführungszeichen ersetzt. (Beachten Sie auch, wie der Einrückungsbereich durch vier Leerzeichen ersetzt wurde.) Dies erweckt den Eindruck, dass mindestens ein Browser JavaScript intern analysiert, als ob alles in doppelte Anführungszeichen geschrieben worden wäre. Man könnte meinen, Firefox braucht weniger Zeit, um JavaScript zu analysieren, wenn bereits alles nach diesem 'Standard' geschrieben ist.

Das macht mich übrigens zu einem sehr traurigen Panda, da ich denke, dass einfache Anführungszeichen im Code viel besser aussehen. In anderen Programmiersprachen sind sie normalerweise schneller zu verwenden als doppelte Anführungszeichen. Daher wäre es nur sinnvoll, wenn dies auch für JavaScript gilt.

Fazit: Ich denke, wir müssen diesbezüglich mehr Forschung betreiben.

Bearbeiten: Dies könnte die Testergebnisse von Peter-Paul Koch aus dem Jahr 2003 erklären .

Es scheint, dass einfache Anführungszeichen in Explorer Windows manchmal schneller sind (ungefähr 1/3 meiner Tests zeigten eine schnellere Antwortzeit), aber wenn Mozilla überhaupt einen Unterschied zeigt, werden doppelte Anführungszeichen etwas schneller verarbeitet. In Opera habe ich überhaupt keinen Unterschied gefunden.

Edit 2014: Moderne Versionen von Firefox / Spidermonkey machen das nicht mehr.


25
Wenn es in einem Browser etwas schneller ist, es in die eine und etwas in einem anderen Browser etwas schneller zu machen, scheint es die einzige Anleitung zu sein, die wir daraus ziehen können, dass wir tun sollten, was wir mehr wollen, weil es einige verletzen wird Benutzer und helfen anderen, und das Ausmaß des Unterschieds ist wahrscheinlich nicht wahrnehmbar. "Vorzeitige Optimierung ..." und so weiter.
Andrew Hedges

2
Es tut mir leid, dass mein Kommentar nicht konstruktiver war. Ich sage nur, dass die Art und Weise, wie der Browser seine interne Darstellung der Syntax anzeigt, wahrscheinlich sehr wenig damit zu tun hat, wie sie analysiert wird, und daher wahrscheinlich kein Grund ist, eine Art von Anführungszeichen der anderen vorzuziehen. Leistungsdaten, die die Analysezeiten für einfache und doppelte Anführungszeichen in verschiedenen Browsern vergleichen, wären dagegen überzeugender.
Chris Calo

1
Dies ist eine großartige Antwort, eine Pause vom Rest, die nur zwitschert: "Sie sind gleich, sie sind gleich" ... Sie sagten: "Außerdem sind sie in anderen Programmiersprachen normalerweise schneller zu verwenden als doppelt Zitate " , Darf ich fragen, welche Sprachen? Ich habe reguläre langs wie Java und C # verwendet und noch nie einen anderen als JS gesehen, der String-Literale in einfachen Anführungszeichen akzeptiert. Die einfachen Anführungszeichen werden normalerweise nur für Zeichenkonstanten verwendet (nur ein Zeichen zulässig).
ADTC

3
AFAIK dies wurde in Firefox 17 behoben. Firefox hat dabei die Dekompilierung durchgeführt, .toStringaber jetzt wird die Originalkopie zurückgegeben. Moderne Firefox wird dieses Problem nicht haben.
Benjamin Gruenbaum

3
Ich weiß nichts über Geschwindigkeitsunterschiede. Ich möchte jedoch darauf hinweisen, dass "dies den Eindruck erweckt, dass mindestens ein Browser JavaScript intern analysiert, als ob alles in doppelten Anführungszeichen geschrieben worden wäre." ist Unsinn. Es wurde nicht analysiert, als ob es in doppelte Anführungszeichen geschrieben wäre. Das heißt, es hat seine interne Darstellung (die nur die Zeichenfolge und nicht die Anführungszeichen speichert) in eine für Menschen lesbare Version umgewandelt, für die zufällig ein Satz von Anführungszeichen verwendet wird. Jedenfalls scheint sich dies laut Benjamins Kommentar geändert zu haben.
Subsub

32

Wenn Sie Inline-JavaScript verwenden (wohl eine "schlechte" Sache, aber diese Diskussion vermeiden), sind einfache Anführungszeichen Ihre einzige Option für String-Literale, glaube ich.

zB funktioniert das gut:

<a onclick="alert('hi');">hi</a>

Aber Sie können das "Hallo" nicht in doppelte Anführungszeichen setzen, und zwar über eine mir bekannte Escape-Methode. Selbst &quot;was meine beste Vermutung gewesen wäre (da Sie Anführungszeichen in einem Attributwert von HTML entkommen), funktioniert in Firefox nicht für mich. \"funktioniert auch nicht, da Sie zu diesem Zeitpunkt auf HTML und nicht auf JavaScript verzichten.

Wenn der Name des Spiels also Konsistenz ist und Sie in Teilen Ihrer App Inline-JavaScript verwenden, sind einfache Anführungszeichen der Gewinner. Jemand korrigiert mich bitte, wenn ich falsch liege.


8
Ich bin mir ziemlich sicher, dass es eine schlechte Sache ist, aber wenn es getan werden muss, bin ich mir ziemlich sicher, dass eine URL-Codierung verwendet werden kann, z. B. <a onclick="alert(%22hi%22);">hi</a>- aus dem Speicher funktioniert dies, obwohl es möglicherweise stattdessen im href-Attribut war<a href="javascript:alert(%22hi%22);">hi</a>
Graza

2
@PhiLho, da hast du recht ... Ich ging davon aus, dass die Leute herkömmliche HTML-Attribute in doppelten Anführungszeichen schreiben und weder (1) alles in einfache Anführungszeichen konvertieren noch (2) mischen und abgleichen einfache und doppelte Anführungszeichen. Aber ja, Sie haben Recht, es ist legal
Tom Lianza

4
@ Tom Lianza, ist sicherlich alert(&quot;hi&quot;)kein gültiges JavaScript. Werte von Attributen werden jedoch codiert. w3.org/TR/html4/intro/sgmltut.html#didx-attribute
Robert

4
Hier mit @Robert einverstanden. &quot;ist der richtige Weg, um ein doppeltes Anführungszeichen innerhalb eines HTML-Attributs zu umgehen. In Firefox funktioniert es einwandfrei. @Denilson, XML (und damit XHTML) erlaubt sowohl einfache als auch doppelte Anführungszeichen. Siehe das AttValueLiteral in der XML-Spezifikation unter w3.org/TR/REC-xml/#d0e888 .
Chris Calo

1
@ Pacener: Weil es nicht falsch ist. In HTML gibt es eine Konvention, um Attribute zwischen doppelte Anführungszeichen zu setzen.
Konrad Borowski

30

Technisch gibt es keinen Unterschied, es geht nur um Stil und Konvention.

Douglas Crockford empfiehlt die Verwendung von einfachen Anführungszeichen für interne Zeichenfolgen und doppelten Anführungszeichen für externe Zeichenfolgen (mit extern sind diejenigen zu verstehen, die dem Benutzer der Anwendung angezeigt werden sollen, z. B. Nachrichten oder Warnungen).

Ich persönlich folge dem.

UPDATE: Es scheint, dass Mr. Crockford seine Meinung geändert hat und jetzt empfiehlt, durchgehend doppelte Anführungszeichen zu verwenden :)


13
Douglas Crockford gegen JQuery. Wähle dein Gift.
Eric

Was ist Crockfords Argumentation dafür?
BadHorsie

1
Dies ist die Konvention, der ich folge. Es ist eher eine persönliche Präferenz. Ich mag es, Zeichenfolgen in einfachen Anführungszeichen für interne Dinge wie jQuery-Selektoren und / oder Dinge wie getElementById ('id') zu verwenden. Ich mag einfach, wie es mit einfachen Anführungszeichen aussieht. Wechseln Sie jedoch zu doppelten Anführungszeichen für externen Text, da dieser häufig interne Anführungszeichen im Text enthalten kann. Außerdem ist es einfach, externe und interne Zeichenfolgen zu erkennen und zu unterscheiden, wenn Sie versuchen, einen Fehler in der einen oder anderen zu finden.
Adimauro

3
Ab April 2016 empfiehlt Douglas Crockford nur die Verwendung von doppelten Anführungszeichen, da in der Praxis viele Entwickler die interne und externe Dichotomie als schwierig empfanden.
Thunderforge

27

Genau genommen gibt es keinen Unterschied in der Bedeutung; Die Wahl hängt also von der Bequemlichkeit ab.

Hier sind einige Faktoren, die Ihre Wahl beeinflussen können:

  • Hausstil: Einige Entwicklergruppen verwenden bereits die eine oder andere Konvention.
  • Clientseitige Anforderungen: Verwenden Sie Anführungszeichen innerhalb der Zeichenfolgen? (Siehe Adys Antwort).
  • Serverseitige Sprache: VB.Net-Benutzer verwenden möglicherweise einfache Anführungszeichen für Java-Skripte, damit die Skripte serverseitig erstellt werden können (VB.Net verwendet doppelte Anführungszeichen für Zeichenfolgen, sodass die Java-Skript-Zeichenfolgen leicht zu unterscheiden sind wenn sie einfache Anführungszeichen verwenden).
  • Bibliothekscode: Wenn Sie eine Bibliothek verwenden, die einen bestimmten Stil verwendet, können Sie den gleichen Stil auch selbst verwenden.
  • Persönliche Präferenz: Sie denken vielleicht, dass der eine oder andere Stil besser aussieht.

Nicht wahr, 'ist 00100111binär, während "ist 00100010binär. Doppelte Anführungszeichen benötigen daher halb so viel Speicherplatz wie einfache Anführungszeichen. Das ist genau dort der Unterschied.

19

Schauen wir uns an, was eine Referenz bewirkt.

In jquery.js wird jede Zeichenfolge in doppelte Anführungszeichen gesetzt.

Ab jetzt verwende ich Zeichenfolgen in doppelten Anführungszeichen. (Ich habe Single benutzt!)


11
Warum wird dies abgelehnt? Dies ist eine Frage des Stils und der beste Stil ist, konsequent zu sein und denen zu folgen, die vor Ihnen kamen.
Eric

2
+1 Die jQuery-API-Dokumentation funktioniert auch. Dies war der einzige Grund, warum ich mich für doppelte Anführungszeichen entschieden habe. Persönlich denke ich, dass Antworten, dass "es auf persönliche Vorlieben ankommt", ein bisschen fehlerhaft sind - am besten, um eine weit verbreitete Konvention herauszufinden und dabei zu bleiben. Und da ich möglicherweise Beispiele aus jQuery (direkt oder indirekt) kopieren und einfügen möchte, möchte ich die Anführungszeichen nicht jedes Mal ersetzen müssen.
Steve Chambers

2
Vielleicht konnte jQuery den Leuten vor ihnen nicht folgen (oder es war ihm wirklich egal, wie die meisten anderen Experten). ;)
James Wilkins

14

Behalten Sie einfach die Konsistenz in dem, was Sie verwenden. Aber lassen Sie Ihren Komfort nicht im Stich.

"This is my string."; // :-|
"I'm invincible."; // comfortable :)
'You can\'t beat me.'; // uncomfortable :(
'Oh! Yes. I can "beat" you.'; // comfortable :)
"Do you really think, you can \"beat\" me?"; // uncomfortable :(
"You're my guest. I can \"beat\" you."; // sometimes, you've to :P
'You\'re my guest too. I can "beat" you too.'; // sometimes, you've to :P

ES6-Update

Verwenden der Template-Literal-Syntax .

`Be "my" guest. You're in complete freedom.`; // most comfort :D

13

Es ist meistens eine Frage des Stils und der Vorlieben. Die anderen Antworten enthalten einige interessante und nützliche technische Erkundungen. Vielleicht möchte ich nur ein wenig weltlichen Rat geben.

  • Wenn Sie in einem Unternehmen oder Team programmieren, ist es wahrscheinlich eine gute Idee, dem "Hausstil" zu folgen.

  • Wenn Sie alleine ein paar Nebenprojekte Hacking, dann schauen Sie sich einige prominente Persönlichkeiten in der Gemeinde. Nehmen wir zum Beispiel an, Sie betreten Node.js. Schauen Sie sich die Kernmodule an, z. B. underscore.js oder express, und sehen Sie, welche Konvention sie verwenden.

  • Wenn beide Konventionen ebenso verwendet werden, dann defer auf Ihre persönlichen
    Vorlieben.

  • Wenn Sie keine persönliche Präferenz haben, dann eine Münze.

  • Wenn du keine Münze hast, dann ist Bier auf mir;)


13

Ich hoffe , ich bin nicht etwas offensichtlich Zugabe, aber ich habe mit kämpfen Django und Ajax und JSON zu diesem Thema .

Unter der Annahme, dass Sie in Ihrem HTML-Code wie normalerweise doppelte Anführungszeichen verwenden, empfehle ich dringend, für den Rest in JavaScript einfache Anführungszeichen zu verwenden.

Also stimme ich @ady zu, aber mit einiger Sorgfalt.

Mein Fazit lautet: In JavaScript spielt es wahrscheinlich keine Rolle, aber sobald Sie es in HTML oder ähnliches einbetten, treten Probleme auf. Sie sollten wissen, was tatsächlich entkommt, lesen und Ihre Zeichenfolge übergeben.

Mein einfacher Fall war:

tbox.innerHTML = tbox.innerHTML + '<div class="thisbox_des" style="width:210px;" onmouseout="clear()"><a href="https://stackoverflow.com/this/thislist/'
                   + myThis[i].pk +'"><img src="/site_media/'
                   + myThis[i].fields.thumbnail +'" height="80" width="80" style="float:left;" onmouseover="showThis('
                   + myThis[i].fields.left +','
                   + myThis[i].fields.right +',\''
                   + myThis[i].fields.title +'\')"></a><p style="float:left;width:130px;height:80px;"><b>'
                   + myThis[i].fields.title +'</b> '
                   + myThis[i].fields.description +'</p></div>'

Sie können das \ 'im dritten Feld von showThis erkennen.

Das doppelte Anführungszeichen hat nicht funktioniert!

Es ist klar warum, aber es ist auch klar warum wir uns an einfache Anführungszeichen halten sollten ... Ich denke ...

In diesem Fall handelt es sich um eine sehr einfache HTML-Einbettung. Der Fehler wurde durch einfaches Kopieren / Einfügen aus einem JavaScript-Code in doppelten Anführungszeichen generiert.

Um die Frage zu beantworten:

Versuchen Sie, in HTML einfache Anführungszeichen zu verwenden. Es könnte ein paar Debug-Probleme sparen ...


1
Ich hatte ein ähnliches Problem mit der ES6-String-Interpolation (Backticks). Mein Build-System hat es zu einer Zeichenfolge in doppelten Anführungszeichen kompiliert, die einen Auth-Header gebrochen hat, der mit einfachen Anführungszeichen gearbeitet hat!
Jay

12

Ich bin mir nicht sicher, ob dies in der heutigen Welt relevant ist, aber doppelte Anführungszeichen wurden früher für Inhalte verwendet, bei denen Steuerzeichen verarbeitet werden mussten, und einfache Anführungszeichen für Zeichenfolgen, bei denen dies nicht der Fall war.

Der Compiler führt eine Zeichenfolgenmanipulation für eine Zeichenfolge in doppelten Anführungszeichen aus, während eine Zeichenfolge in einfachen Anführungszeichen buchstäblich unberührt bleibt. Dies führte dazu, dass 'gute' Entwickler sich dafür entschieden, einfache Anführungszeichen für Zeichenfolgen zu verwenden, die keine Steuerzeichen wie \noder \0(nicht in einfachen Anführungszeichen verarbeitet) und doppelte Anführungszeichen enthielten, wenn die Zeichenfolge analysiert werden musste (mit geringen Kosten in CPU-Zyklen für Verarbeitung der Zeichenfolge).


14
Es ist nicht so, dass Dinge früher so gemacht wurden und jetzt anders gemacht werden. Verschiedene Sprachen behandeln Anführungszeichen unterschiedlich, und einige funktionieren so, wie Sie es beschreiben. Dies ist jedoch eine JavaScript- Frage. Einfache und doppelte Anführungszeichen werden in JavaScript identisch behandelt (mit der Ausnahme, dass die andere Art von Anführungszeichen in einer Zeichenfolge verwendet werden kann, ohne dass ein Escapezeichen entsteht). Es gibt keine Frage von doppelten Anführungszeichen, die Steuerzeichen oder Zeichenfolgeninterpolation ermöglichen. JavaScript funktioniert so nicht. Steuerzeichen und Escape-Sequenzen funktionieren unabhängig von der Art des verwendeten Zitats gleich.
Michael Geary

Als Ex-Perl-Programmierer denke ich immer wieder darüber nach, obwohl ich weiß, dass dies in JS irrelevant ist.
zkent

12

Wenn Sie jshint verwenden , wird ein Fehler ausgegeben , wenn Sie eine doppelte Anführungszeichenfolge verwenden.

Ich habe es durch das Yeoman-Gerüst von AngularJS verwendet, aber vielleicht gibt es irgendwie eine Möglichkeit, dies zu konfigurieren.

Wenn Sie HTML in JavaScript verarbeiten, ist es übrigens einfacher, einfache Anführungszeichen zu verwenden:

var foo = '<div class="cool-stuff">Cool content</div>';

Und zumindest verwendet JSON doppelte Anführungszeichen, um Zeichenfolgen darzustellen.

Es gibt keine triviale Möglichkeit, Ihre Frage zu beantworten


Hat sich die Implementierung von jshint geändert? da die Demo-Website entweder zu akzeptieren scheint, ohne Warnungen / Fehler auszulösen, und ich keine Optionen finde, um die Verwendung von jshint einzuschränken. Vielleicht ist diese Antwort veraltet oder ungenau?
Lea Hayes

Wenn jshint einen Fehler für eine Zeichenfolge in doppelten Anführungszeichen auslöst, ist diese ernsthaft fehlerhaft. Der JavaScript-Standard definiert, was richtig ist und nicht irgendein defekter Linter.
Mecki

10

In Bezug auf die Leistung werden Angebote niemals Ihr Engpass sein, die Leistung ist jedoch in beiden Fällen gleich.

Wenn Sie die Codierungsgeschwindigkeit verwenden 'und eine Zeichenfolge abgrenzen möchten, müssen Sie "Anführungszeichen vermeiden. Es ist wahrscheinlicher, dass Sie "innerhalb der Zeichenfolge verwenden müssen, zum Beispiel:

//JSON Objects:
var jsonObject = '{"foo":"bar"}';
//HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';

Dann bevorzuge ich die 'Abgrenzung der Zeichenfolge, damit ich weniger Zeichen maskieren muss.


10

Ein (dummer) Grund für die Verwendung von einfachen Anführungszeichen wäre, dass Sie nicht die Umschalttaste drücken müssen, um sie einzugeben, wohingegen ein doppeltes Anführungszeichen dies tut. (Ich gehe davon aus, dass für die durchschnittliche Zeichenfolge kein Escapezeichen erforderlich ist. Dies ist eine vernünftige Annahme.) Nehmen wir nun an, ich codiere jeden Tag 200 Codezeilen. Vielleicht habe ich in diesen 200 Zeilen 30 Zitate. Vielleicht dauert das Eingeben eines doppelten Anführungszeichens 0,1 Sekunden länger als das Eingeben eines einfachen Anführungszeichens (weil ich die Umschalttaste drücken muss). Dann verschwende ich an einem bestimmten Tag 3 Sekunden. Wenn ich 40 Jahre lang 200 Tage im Jahr auf diese Weise codiere, habe ich 6,7 Stunden meines Lebens verschwendet. Denkanstöße.


1
Ich denke, Sie beziehen sich hier nur auf das englische Tastaturlayout ... Ich habe ein deutsches, ich muss für beide die Umschalttaste drücken. Wie auch immer, ich verstehe nicht, warum das Drücken der Umschalttaste dem Prozess Zeit verleiht. Ich drücke mit der linken Hand auf Shift und drücke mit der rechten die Anführungszeichen-Taste. Es passiert zur gleichen Zeit, für mich gibt es keinen Unterschied.
Codewandler

1
@codewandler Das Drücken der Umschalttaste ist immer noch mit Kosten verbunden, auch wenn Sie sie parallel zur Taste "drücken" können. Dadurch werden Sie gezwungen, einen Finger von seiner Standardposition wegzubewegen. Angenommen, Sie geben Folgendes ein: var description = "This is a \"quick\" test";on Eine englische Tastatur. Bei einer englischen Tastatur muss sich Ihr kleiner Finger von der linken Umschalttaste zur Q-Taste in der oberen Reihe bewegen, anstatt sich von der A-Taste zur Q-Taste zu bewegen. Mit anderen Worten, er muss die doppelte Strecke zurücklegen Ich bin nicht sicher, wo sich die Tasten auf der deutschen Tastatur befinden, aber ich bin sicher, dass es ein analoges Beispiel gibt.
John Kurlak

2
@codewandler Auch wenn ich Shift eingeben muss, selbst wenn ich es parallel machen kann, kann sich der linke Finger nicht darauf vorbereiten, das nächste Zeichen nach "in was auch immer Sie
tippen

1
Die Idee der "Zeitverschwendung" ist ein bisschen albern, aber die Idee einer geringeren ergonomischen Belastung (insbesondere im Zeitalter des Karpeltunnelsyndroms usw.) macht es zu einem schönen Gewinn, insbesondere in Fällen, in denen es sonst keine Rolle spielt. Bei mehr als 1.000 Codezeilen pro Tag könnten dadurch Hunderte von täglichen kleinen Kurven gespart werden.
Beejor

9

Untersuchung der Vor- und Nachteile

Für einfache Anführungszeichen

  • Weniger visuelle Unordnung.
  • Generieren von HTML: HTML-Attribute werden normalerweise durch doppelte Anführungszeichen begrenzt.

elem.innerHTML = '<a href="' + url + '">Hello</a>';
Einfache Anführungszeichen sind in HTML jedoch genauso legal.

elem.innerHTML = "<a href='" + url + "'>Hello</a>";

Darüber hinaus ist Inline-HTML normalerweise ein Anti-Pattern. Bevorzugen Sie Vorlagen.

  • JSON generieren: In JSON sind nur doppelte Anführungszeichen zulässig.

myJson = '{ "hello world": true }';

Auch hier sollten Sie JSON nicht auf diese Weise erstellen müssen. JSON.stringify () ist oft genug. Wenn nicht, verwenden Sie Vorlagen.

Für doppelte Anführungszeichen

  • Doppelte sind leichter zu erkennen, wenn Sie keine Farbcodierung haben. Wie in einem Konsolenprotokoll oder einer Art Ansichtsquellen-Setup.
  • Ähnlichkeit mit anderen Sprachen: In der Shell-Programmierung (Bash usw.) existieren String-Literale in einfachen Anführungszeichen, aber Escapezeichen werden in ihnen nicht interpretiert. C und Java verwenden doppelte Anführungszeichen für Zeichenfolgen und einfache Anführungszeichen für Zeichen.
  • Wenn Code gültiger JSON-Code sein soll, müssen Sie doppelte Anführungszeichen verwenden.

Für beide

In JavaScript gibt es keinen Unterschied zwischen den beiden. Daher können Sie alles verwenden, was im Moment bequem ist. Beispielsweise erzeugen die folgenden Zeichenfolgenliterale alle dieselbe Zeichenfolge:

    "He said: \"Let's go!\""
    'He said: "Let\'s go!"'
    "He said: \"Let\'s go!\""
    'He said: \"Let\'s go!\"'

Einfache Anführungszeichen für interne Zeichenfolgen und doppelte Anführungszeichen für externe. Auf diese Weise können Sie interne Konstanten von Zeichenfolgen unterscheiden, die dem Benutzer angezeigt (oder auf die Festplatte usw. geschrieben) werden sollen. Natürlich sollten Sie vermeiden, Letzteres in Ihren Code aufzunehmen, aber das kann nicht immer getan werden.


8

Eine weitere Sache, die Sie als Grund für die Umstellung von doppelten Anführungszeichen auf einfache Anführungszeichen in Betracht ziehen sollten, ist die zunehmende Beliebtheit von serverseitigen Skripten. Bei Verwendung von PHP können Sie Variablen übergeben und Javascript-Funktionen mithilfe von Zeichenfolgen und Variablen in PHP analysieren.

Wenn Sie eine Zeichenfolge schreiben und doppelte Anführungszeichen für Ihr PHP verwenden, müssen Sie sich keinem der einfachen Anführungszeichen entziehen, und PHP ruft automatisch den Wert der Variablen für Sie ab.

Beispiel: Ich muss eine Javascript-Funktion mit einer Variablen von meinem Server ausführen.

public static function redirectPage( $pageLocation )
{
    echo "<script type='text/javascript'>window.location = '$pageLocation';</script>";
}

Dies erspart mir viel Aufwand beim Verknüpfen von Strings und ich kann effektiv ein Javascript aus PHP aufrufen. Dies ist nur ein Beispiel, aber dies kann einer von mehreren Gründen sein, warum Programmierer standardmäßig einfache Anführungszeichen in Javascript verwenden.

Zitat aus PHP-Dokumenten : "Das wichtigste Merkmal von Zeichenfolgen in doppelten Anführungszeichen ist die Tatsache, dass Variablennamen erweitert werden. Weitere Informationen finden Sie unter String-Analyse."


+1, ich mache das in meinem MVC.Net-Projekt, damit die doppelten Anführungszeichen von C # die einfachen Anführungszeichen von Javascript nicht beeinträchtigen und umgekehrt.
DCShannon

3
Ich denke, wenn Sie JavaScript von einer PHP-Klassenmethode auf Ihre Seite schreiben, haben Sie größere Probleme.
BadHorsie

6

Es gibt Leute, die behaupten, Leistungsunterschiede zu sehen: alter Mailinglisten-Thread . Aber ich konnte keinen von ihnen finden, der bestätigt werden konnte.

Die Hauptsache ist, zu prüfen, welche Art von Anführungszeichen (doppelt oder einfach) Sie in Ihrer Zeichenfolge verwenden. Es hilft, die Anzahl der Fluchten niedrig zu halten. Wenn Sie beispielsweise mit HTML in Ihren Zeichenfolgen arbeiten, ist es einfacher, einfache Anführungszeichen zu verwenden, damit Sie nicht alle doppelten Anführungszeichen um die Attribute herum umgehen müssen.


Obwohl Attribute auch mit einfachen Anführungszeichen umgeben sein können :)
Damir Zekić

Ihr Recht, ich dachte, dass xml und xhtml doppelte Anführungszeichen für Attribute vorschreiben, aber einfache Anführungszeichen sind zulässig.
Michiel Overeem

6

Ich würde doppelte Anführungszeichen verwenden, wenn einfache Anführungszeichen nicht verwendet werden können und umgekehrt:

"'" + singleQuotedValue + "'"
'"' + doubleQuotedValue + '"'

Anstatt:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""

Was ist mit einer Zeichenfolge, die sowohl einfache als auch doppelte Anführungszeichen enthält, wie O'rea "lly
sudhAnsu63

6

In JavaScript gibt es keinen Unterschied zwischen einfachen und doppelten Anführungszeichen.

Spezifikation ist wichtig:

Möglicherweise gibt es Leistungsunterschiede, aber diese sind absolut minimal und können sich je nach Implementierung des Browsers täglich ändern. Weitere Diskussionen sind zwecklos, es sei denn, Ihre JavaScript-Anwendung ist hunderttausend lang.

Es ist wie ein Maßstab, wenn

a=b;

ist schneller als

a = b;

(zusätzliche Leerzeichen)

heute in einem bestimmten Browser und einer bestimmten Plattform usw.


2
ohne Leerzeichen ist schneller. Es müssen weniger Zeichen in der Zeichenfolge analysiert werden. : p
pilavdzice

6

Bei Verwendung von CoffeeScript verwende ich doppelte Anführungszeichen. Ich bin damit einverstanden, dass Sie eine auswählen und dabei bleiben. Mit CoffeeScript können Sie interpolieren, wenn Sie doppelte Anführungszeichen verwenden.

"This is my #{name}"

ES6 verwendet Back Ticks (`) für Vorlagenzeichenfolgen. Das hat wahrscheinlich einen guten Grund, aber beim Codieren kann es umständlich sein, das Zeichenfolgenliteralzeichen von Anführungszeichen oder doppelten Anführungszeichen in Back-Ticks zu ändern, um die Interpolationsfunktion zu erhalten. CoffeeScript ist möglicherweise nicht perfekt, aber es ist eine nette Funktion, überall das gleiche Zeichenfolgenliteralzeichen (doppelte Anführungszeichen) zu verwenden und immer interpolieren zu können.

`This is my ${name}`

Für mich ist der Back Tick ein klarer Gewinner in diesem Wettbewerb, (fast) keine Präsenz in gängigen Textzeichenfolgen plus Var-Interpolation
Simone Poggi

5

Wenn Sie zwischen JavaScript und C # hin und her springen, trainieren Sie am besten Ihre Finger für die übliche Konvention, bei der es sich um doppelte Anführungszeichen handelt.


5

Ich habe die folgenden ungefähr 20 Mal ausgeführt. Und es scheint, dass doppelte Anführungszeichen etwa 20% schneller sind.

Der lustige Teil ist, wenn Sie Teil 2 und Teil 1 ändern, sind einfache Anführungszeichen etwa 20% schneller.

//Part1
var r='';
var iTime3 = new Date().valueOf();
for(var j=0; j<1000000; j++) {
    r+='a';
}
var iTime4 = new Date().valueOf();
alert('With single quote : ' + (iTime4 - iTime3));  

//Part 2                
var s="";
var iTime1 = new Date().valueOf();
for(var i=0; i<1000000; i++) {
    s += "a";
}
var iTime2 = new Date().valueOf();
alert('With double quote: ' + (iTime2 - iTime1));

31
Anders ausgedrückt, Sie haben festgestellt, dass der spätere Code am schnellsten ausgeführt wird. Dies ist das Problem bei Mikro-Benchmarks. Sie müssen berücksichtigen, dass die JS-Engine den Code während der Ausführung optimiert. (Sie werden den gleichen Effekt beim Benchmarking von Java sehen, da die JIT funktioniert.)
David Phillips

4
erstes neues Datum ist langsam, var dummy_date = new Date()zum Anfang hinzufügen
Lauri

1
Der Grad der Mikrooptimierung ist hier so albern, dass man auch argumentieren könnte, dass einfache Anführungszeichen schneller zu tippen sind, was zu einer schnelleren Entwicklung führt.
Beejor

4

Es gibt absolut keinen Unterschied, daher ist es meistens eine Frage des Geschmacks und des Inhalts der Zeichenfolge (oder ob sich der JS-Code selbst in einer Zeichenfolge befindet), die Anzahl der Escapezeichen gering zu halten.

Die Geschwindigkeitsunterschiedslegende könnte aus der PHP-Welt stammen, in der sich die beiden Anführungszeichen unterschiedlich verhalten.


Und Ruby, darf ich hinzufügen. Python hat das gleiche Verhalten wie JavaScript: Es wird kein Unterschied zwischen einfachen / doppelten Anführungszeichen gemacht.
Damir Zekić

4

Nachdem ich alle Antworten gelesen habe, die besagen, dass es möglicherweise schneller ist oder Vorteile hat, würde ich sagen, dass doppelte Anführungszeichen besser oder auch schneller sind, da der Google Closure Compiler einfache Anführungszeichen in doppelte Anführungszeichen konvertiert.


Weißt du warum das so ist?
ma11hew28

Ich weiß es nicht. Vielleicht ist es eine Codierungskonvention und nichts Besonderes.
Mohsen

4

Jetzt, da es 2020 ist, sollten wir eine dritte Option für Javascript in Betracht ziehen: Das einzelne Backtick für alles.

Dies kann überall anstelle von einfachen oder doppelten Anführungszeichen verwendet werden.

Es ermöglicht Ihnen, alle Dinge zu tun!

  1. Fügen Sie einfache Anführungszeichen ein: "Es ist großartig!"
  2. Fügen Sie doppelte Anführungszeichen ein: "Es ist" wirklich "großartig!"
  3. Verwenden Sie die String-Interpolation: `Es ist" $ {besser} "als großartig!`
  4. Es erlaubt mehrere Zeilen: `

    Diese

    Macht

    Javascript

    Besser!

    `

Es verursacht auch keinen Leistungsverlust, wenn die anderen beiden ersetzt werden: https://medium.com/javascript-in-plain-english/are-backticks-slower-than-other-strings-in-javascript-ce4abf9b9fa


3

Wenn Ihre JS-Quelle ist:

elem.innerHTML="<img src='smily' alt='It\'s a Smily' style='width:50px'>";

Die HTML-Quelle lautet:

<img src="smiley" alt="It's a Smiley" style="width:50px">

oder für HTML5

<img src=smiley alt="It's a Smiley" style=width:50px>

JS erlaubt solche Arrays:

var arr=['this','that'];

Aber wenn Sie es stringifizieren, wird es aus kompatiblen Gründen sein:

JSON=["this","that"]

Ich bin sicher, das dauert einige Zeit.


3

Nur um meine 2 Cent hinzuzufügen: Als ich vor einigen Jahren sowohl mit JS als auch mit PHP gearbeitet habe, habe ich mich daran gewöhnt, einfache Anführungszeichen zu verwenden, damit ich das Escape-Zeichen ('\') eingeben kann, ohne es ebenfalls maskieren zu müssen. Ich habe es normalerweise verwendet, wenn ich rohe Zeichenfolgen mit Dateipfaden usw. eingegeben habe ( http://en.wikipedia.org/wiki/String_literal#Raw_strings ).

Wie auch immer, meine Konvention endete damit, dass einfache Anführungszeichen für rohe Zeichenfolgen vom Typ Bezeichner verwendet wurden if (typeof s == 'string') ...( z. B. (in denen Escape-Zeichen niemals verwendet werden würden)) und doppelte Anführungszeichen für Texte wie "Hey, was ist los?". Ich verwende auch einfache Anführungszeichen in Kommentaren als typografische Konvention, um Bezeichnernamen anzuzeigen. Dies ist nur eine Faustregel, und ich breche nur bei Bedarf ab, z. B. beim Eingeben von HTML-Zeichenfolgen '<a href="#"> like so <a>'(obwohl Sie die Anführungszeichen auch hier umkehren können). Mir ist auch bewusst, dass im Fall von JSON doppelte Anführungszeichen für die Namen verwendet werden - aber außerhalb davon bevorzuge ich persönlich die einfachen Anführungszeichen, wenn für den Text zwischen den Anführungszeichen niemals ein Escapezeichen erforderlich ist - wie z document.createElement('div').

Unterm Strich, und wie einige erwähnt / angedeutet haben, wählen Sie eine Konvention, bleiben Sie dabei und weichen Sie nur dann ab, wenn dies erforderlich ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.