Domanda Quando utilizzare le virgolette doppie o singole in JavaScript?


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

Vedo sempre più librerie JavaScript là fuori usando le virgolette singole quando si gestiscono le stringhe. Quali sono i motivi per usare l'uno sull'altro? Ho pensato che fossero praticamente intercambiabili.


1684


origine


risposte:


La ragione più probabile per l'utilizzo del singolo o del doppio in diverse librerie è la preferenza del programmatore e / o la coerenza dell'API.

Oltre a essere coerenti, usa quello che meglio si adatta alla stringa :.

Usare l'altro tipo di citazione come letterale:

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

... ma questo può complicarsi ...

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

Un'altra opzione, nuova in ES6, sono Template letterali che usano il back-tick carattere:

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

I valori letterali di modello offrono una sintassi pulita per: interpolazione variabile, stringhe su più righe e altro.


1042



Se hai a che fare con JSON, va notato che in senso stretto, le stringhe JSON devono essere doppie. Certo, molte librerie supportano anche le virgolette singole, ma ho avuto grandi problemi in uno dei miei progetti prima di rendermi conto che il solo quotare una stringa non è in realtà secondo gli standard JSON.


567



Non c'è una soluzione migliore; tuttavia, vorrei sostenere che le virgolette doppie possono essere più desiderabili a volte:

  • I nuovi arrivati ​​conosceranno già le doppie virgolette dalla loro lingua. In inglese, dobbiamo usare le virgolette " per identificare un passaggio del testo citato. Se dovessimo usare una sola citazione ', il lettore potrebbe interpretarlo erroneamente come una contrazione. L'altro significato di un passaggio di testo circondato dal ' indica il significato 'colloquiale'. È logico rimanere coerenti con le lingue preesistenti e questo potrebbe facilitare l'apprendimento e l'interpretazione del codice.
  • Le doppie virgolette eliminano la necessità di sfuggire agli apostrofi (come nelle contrazioni). Considera la stringa: "I'm going to the mall", rispetto alla versione altrimenti sfuggita: 'I\'m going to the mall'.
  • Le doppie virgolette indicano una stringa in molte altre lingue. Quando si impara un nuovo linguaggio come Java o C, vengono sempre utilizzate doppie virgolette. In Ruby, PHP e Perl, le stringhe tra virgolette singole non implicano escape con backslash mentre le doppie virgolette supportano tali stringhe.

  • La notazione JSON è scritta con virgolette.

Tuttavia, come altri hanno affermato, è molto importante rimanere coerenti.


244



Il solo la differenza è dimostrata di seguito:

'A string that\'s single quoted'

"A string that's double quoted"

Quindi, dipende solo dalla quantità di escape che vuoi fare. Ovviamente lo stesso vale per le doppie virgolette nelle stringhe doppie citate.


111



Citazioni singole

Vorrei che le virgolette fossero lo standard, perché loro ha un po 'più senso, ma continuo a usare le virgolette singole perché dominano la scena.

Citazioni singole:

Nessuna preferenza:

Virgolette:


68



Mi piacerebbe dire che la differenza è puramente stilistica, ma ho davvero dei dubbi. Considera il seguente esempio:

/*
   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 e Internet Explorer (testato in IE7 e IE8), ciò restituirà quanto segue:

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

Tuttavia, Firefox produrrà un risultato leggermente diverso:

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

Le virgolette singole sono state sostituite da virgolette. (Si noti anche come lo spazio di indentazione è stato sostituito da quattro spazi.) Questo dà l'impressione che almeno un browser analizzi JavaScript internamente come se tutto fosse stato scritto usando virgolette doppie. Si potrebbe pensare, ci vuole Firefox meno tempo per analizzare JavaScript se tutto è già scritto secondo questo 'standard'.

Il che, a proposito, mi rende un panda molto triste, dal momento che penso che le virgolette singole siano molto più belle nel codice. Inoltre, in altri linguaggi di programmazione, di solito sono più veloci da utilizzare rispetto alle doppie virgolette, quindi avrebbe senso solo se lo stesso si applica a JavaScript.

Conclusione: Penso che dobbiamo fare più ricerche su questo.

Modificare: Questo potrebbe spiegare I risultati dei test di Peter-Paul Koch dal lontano 2003.

Sembra che siano citazioni singole a volte più veloce in Explorer Windows (circa 1/3 dei miei test ha mostrato un tempo di risposta più veloce), ma se Mozilla mostra una differenza, gestisce le virgolette leggermente più velocemente. Non ho trovato alcuna differenza in Opera.

Modifica 2014: Le versioni moderne di Firefox / Spidermonkey non lo fanno più.


54



Se stai facendo inline JavaScript (probabilmente una cosa "cattiva", ma evitando quella discussione) singolo le virgolette sono la tua unica opzione per stringhe letterali, credo.

ad es., funziona bene:

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

Ma non puoi racchiudere il "ciao" tra virgolette, tramite qualsiasi metodo di escape di cui sono a conoscenza. Anche &quot; quale sarebbe stata la mia ipotesi migliore (dato che stai sfuggendo alle virgolette in un valore di attributo di HTML) non funziona per me in Firefox. \" non funzionerà perché a questo punto si sta eseguendo l'escape per HTML, non per JavaScript.

Quindi, se il nome del gioco è consistenza, e stai andando a fare qualche inline JavaScript in alcune parti della tua app, penso che le singole virgolette siano il vincitore. Qualcuno, per favore, correggimi se sbaglio.


30



Tecnicamente non c'è differenza, è solo questione di stile e convenzione.

Douglas Crockford raccomanda l'uso di virgolette singole per stringhe interne e virgolette doppie per esterni (per esterno intendiamo quelle da visualizzare all'utente dell'applicazione, come messaggi o avvisi).

Io personalmente lo seguo.

AGGIORNAMENTO: Sembra che Mr. Crockford cambiato idea e ora ti consiglia di usare virgolette doppie in tutto :)


29



A rigor di termini, non c'è differenza di significato; quindi la scelta si riduce alla convenienza.

Qui ci sono diversi fattori che potrebbero influenzare la tua scelta:

  • House style: alcuni gruppi di sviluppatori usano già una convenzione o l'altra.
  • Requisiti lato client: userete le virgolette all'interno delle stringhe? (Vedi la risposta di Ady).
  • Linguaggio lato server: le persone VB.Net possono scegliere di utilizzare le virgolette singole per java-script in modo che gli script possano essere compilati lato server (VB.Net utilizza le doppie virgolette per le stringhe, quindi le stringhe java-script sono facili da distinguere se usano virgolette singole).
  • Codice libreria: se stai utilizzando una libreria che utilizza uno stile particolare, potresti prendere in considerazione l'utilizzo dello stesso stile.
  • Preferenza personale: potresti vedere l'uno o l'altro stile migliore.

23