Vraag Wanneer gebruik je dubbele of enkele aanhalingstekens in JavaScript?


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

Ik zie steeds meer JavaScript-bibliotheken met enkele aanhalingstekens bij het afhandelen van strings. Wat zijn de redenen om de ene boven de andere te gebruiken? Ik dacht dat ze vrijwel onderling uitwisselbaar waren.


1684


oorsprong


antwoorden:


De meest waarschijnlijke reden voor het gebruik van single vs double in verschillende bibliotheken is programmervoorkeur en / of API-consistentie.

Behalve consistent te zijn, gebruik dan wat het beste past bij de string :.

Het andere type citaat als een letterlijke gebruiken:

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

... maar dit kan ingewikkeld worden ...

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

Een andere optie, nieuw in ES6, is Sjabloon letterwoorden welke de back-tick karakter:

alert(`Use "double" and 'single' quotes in the same string`);
alert(`The escape the \` back-tick character in a string`);

Template-letterwoorden bieden een schone syntaxis voor: variabele interpolatie, meerregelige tekenreeksen en meer.


1042



Als u met JSON te maken hebt, moet u er rekening mee houden dat strikt genomen JSON-strings dubbel moeten worden aangehaald. Natuurlijk ondersteunen veel bibliotheken ook enkele aanhalingstekens, maar ik had grote problemen in een van mijn projecten voordat ik me realiseerde dat het enkele citeren van een string in feite niet in overeenstemming is met de JSON-normen.


567



Er is geen betere oplossing; Ik zou echter willen argumenteren dat dubbele aanhalingstips soms wenselijker kunnen zijn:

  • Nieuwkomers zijn al bekend met dubbele aanhalingstekens uit hun taal. In het Engels moeten we dubbele aanhalingstekens gebruiken " om een ​​passage van geciteerde tekst te identificeren. Als we een enkel citaat zouden gebruiken ', de lezer kan het verkeerd interpreteren als een samentrekking. De andere betekenis van een passage van tekst omgeven door de ' geeft de 'informele' betekenis aan. Het is logisch om consistent te blijven met reeds bestaande talen, en dit kan waarschijnlijk het leren en interpreteren van code vergemakkelijken.
  • Dubbele aanhalingstekens elimineren de noodzaak om aan apostrofs te ontsnappen (zoals in samentrekkingen). Overweeg de string: "I'm going to the mall", versus de anderszins ontsnapte versie: 'I\'m going to the mall'.
  • Dubbele aanhalingstekens betekenen een tekenreeks in veel andere talen. Wanneer u een nieuwe taal zoals Java of C leert, worden altijd dubbele aanhalingstekens gebruikt. In Ruby, PHP en Perl impliceren enkelvoudige tekenreeksen geen backslash-escapes, terwijl dubbele aanhalingstekens deze ondersteunen.

  • JSON-notatie is geschreven met dubbele aanhalingstekens.

Desalniettemin is het, zoals anderen hebben gesteld, het belangrijkste om consistent te blijven.


244



De enkel en alleen verschil wordt aangetoond in het volgende:

'A string that\'s single quoted'

"A string that's double quoted"

Het komt dus alleen neer op hoeveel citaat je wilt gaan doen. Uiteraard geldt hetzelfde voor dubbele aanhalingstekens in dubbele aanhalingstekens.


111



Enkele offertes

Ik wou dat dubbele aanhalingstekens de standaard waren, omdat ze maak een beetje meer zin, maar ik blijf enkele aanhalingstekens gebruiken omdat ze de scène domineren.

Enkele aanhalingstekens:

Geen voorkeur:

Dubbele aanhalingstekens:


68



Ik zou willen zeggen dat het verschil puur stilistisch is, maar ik heb echt mijn twijfels. Bekijk het volgende voorbeeld:

/*
   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 en Internet Explorer (getest in IE7 en IE8), wordt het volgende geretourneerd:

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

Firefox zal echter een iets ander resultaat opleveren:

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

De enkele aanhalingstekens zijn vervangen door dubbele aanhalingstekens. (Merk ook op hoe de inspringende ruimte werd vervangen door vier spaties.) Dit wekt de indruk dat ten minste één browser intern JavaScript analyseert alsof alles met dubbele aanhalingstekens is geschreven. Je zou denken dat Firefox minder tijd nodig heeft om JavaScript te analyseren als alles al volgens deze 'standaard' is geschreven.

Wat mij trouwens een heel trieste panda maakt, omdat ik vind dat enkele aanhalingstekens er veel leuker uitzien in code. Bovendien zijn ze in andere programmeertalen meestal sneller te gebruiken dan dubbele aanhalingstekens, dus het zou alleen zinvol zijn als hetzelfde op JavaScript zou worden toegepast.

Conclusie: Ik denk dat we hier meer onderzoek naar moeten doen.

Bewerk: Dit zou kunnen verklaren Peter-Paul Koch's testresultaten van terug in 2003.

Het lijkt erop dat enkele aanhalingstekens zijn soms sneller in Explorer Windows (ongeveer 1/3 van mijn tests vertoonde een snellere responstijd), maar als Mozilla een verschil laat zien, verwerkt het iets minder snel dubbele aanhalingstekens. Ik vond helemaal geen verschil in Opera.

Bewerk 2014: Moderne versies van Firefox / Spidermonkey doen dit niet meer.


54



Als je inline JavaScript aan het doen bent (betwistbaar een "slecht" ding, maar het vermijden van die discussie) single citaten zijn mijn enige optie voor letterlijke snaren, geloof ik.

dit werkt bijvoorbeeld prima:

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

Maar je kunt de 'hi' niet in dubbele aanhalingstekens plaatsen, via een ontsnappingsmethode waarvan ik me bewust ben. Zelfs &quot; wat mijn beste gok zou zijn geweest (aangezien je aan offertes ontsnapt in een kenmerkwaarde van HTML) werkt niet voor mij in Firefox. \" zal ook niet werken omdat je op dit moment aan het ontsnappen bent voor HTML, niet voor JavaScript.

Dus, als de naam van het spel consistent is, en je gaat wat inline JavaScript doen in delen van je app, denk ik dat enkele aanhalingstekens de winnaar zijn. Iemand corrigeert me als ik het mis heb.


30



Technisch is er geen verschil, het is alleen maar een kwestie van stijl en conventie.

Douglas Crockford beveelt het gebruik van enkele aanhalingstekens voor interne strings en dubbele aanhalingstekens voor externe (door externe we bedoelen die worden weergegeven aan de gebruiker van de toepassing, zoals berichten of waarschuwingen).

Ik volg dat persoonlijk.

UPDATE: Het lijkt erop dat Mr. Crockford van gedachten veranderd en raadt nu aan om dubbele aanhalingstekens te gebruiken :)


29



Strikt genomen is er geen verschil in betekenis; dus de keuze komt neer op gemak.

Hier zijn verschillende factoren die van invloed kunnen zijn op uw keuze:

  • Huisstijl: Sommige groepen ontwikkelaars gebruiken al de ene conventie of de andere.
  • Vereisten voor client-side: gebruikt u citaten binnen de strings? (Zie het antwoord van Ady).
  • Server-side taal: VB.Net-mensen kunnen ervoor kiezen om enkele aanhalingstekens te gebruiken voor java-script, zodat de scripts aan de serverkant kunnen worden gebouwd (VB.Net gebruikt dubbele aanhalingstekens voor tekenreeksen, zodat de java-script-reeksen gemakkelijk te onderscheiden zijn als ze enkele aanhalingstekens gebruiken).
  • Bibliotheekcode: als u een bibliotheek gebruikt die een bepaalde stijl gebruikt, kunt u overwegen dezelfde stijl zelf te gebruiken.
  • Persoonlijke voorkeur: het kan voorkomen dat een of andere stijl er beter uitziet.

23



Laten we kijken wat een referentie doet.

Binnen jquery.js wordt elke tekenreeks met dubbele aanhalingstekens weergegeven.

Dus begin ik nu met dubbel aangehaalde tekenreeksen. (Ik gebruikte single!)


18