Quando usar aspas duplas ou simples em JavaScript?

1968

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

Vejo cada vez mais bibliotecas JavaScript por aí usando aspas simples ao manipular strings. Quais são os motivos para usar um sobre o outro? Eu pensei que eles eram praticamente intercambiáveis.

aemkei
fonte
125
qual é mais fácil de ler? alerta ("Está na hora do jogo"); ou alerta ('Está na hora do jogo');
Ryan Miller
591
Que tal esse Ryan? alert("It's \"game\" time.");ou alert('It\'s "game" time.');?
Francisc
37
Se as aspas simples sempre forem usadas e, ocasionalmente, as aspas duplas, onde o literal contiver aspas simples, teremos que digitar muito menos botões de troca e o dedo mindinho esquerdo nos dará bênçãos. Mas sim, como @arne disse, para JSON deve ser usada citação dupla.
IsmailS
9
As aspas simples são mais fáceis de fazer quando você está em um teclado europeu (as aspas duplas são Shift + 2, o que não é tão bom quanto tocar uma única tecla convenientemente com o mindinho direito).
Arne #
38
@ Arne Não existe um "teclado europeu". Por exemplo, o teclado alemão requer mudança para os dois tipos de cotação. (Mas aspas simples são mais fáceis.)
ANeves

Respostas:

1222

O motivo mais provável para o uso de single vs double em diferentes bibliotecas é a preferência do programador e / ou a consistência da API. Além de consistente, use o que melhor se adequar à sequência.

Usando o outro tipo de citação como literal:

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

Isso pode ser complicado:

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

Outra opção, nova no ES6, são literais de modelo que usam o back-tickcaractere:

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

Literais de modelo oferecem uma sintaxe limpa para: interpolação variável, seqüências de várias linhas e muito mais.

Observe que o JSON é formalmente especificado para usar aspas duplas, o que pode ser considerado dependendo dos requisitos do sistema.

Beau Smith
fonte
84
Um ponto importante a ser observado em todas as convenções de código - defina-o uma vez e atenha-se a ele. IOW, não use aspas duplas em algum lugar e aspas simples em outro lugar.
Cerebrus
170
@ Cerebrus - Eu acho que a flexibilidade está bem com este. Claro, escolha um estilo preferido, mas se você precisar se afastar do estilo para economizar muitas citações em uma sequência. Eu ficaria bem com isso.
Martin Clarke
5
Eu não acho que exista qualquer razão para ter que ser consistente com isso. Não há nenhuma vantagem para qualquer um, e eu não acho que a legibilidade é realmente afetado ou não você usar 'em um lugar e "em outro.
cdmckay
2
@ Olly Hicks, teste interessante !! As aspas simples são na verdade várias vezes mais rápidas que as aspas duplas aqui no Chrome 13 (OSX). Interessante ...
Ricket
12
Um pouco fora de tópico, mas se as pessoas usassem tipografia correta, muitas dessas discussões sobre fuga seriam obsoletas: alert('It’s “game” time')vs. alert("It’s “game” time")- não importa. Você só precisa escapar nos casos (raros) onde o sinal nobre simples ou dupla ', "é realmente apropriado.
jotaen
617

Se você estiver lidando com JSON, observe que, estritamente falando, as strings JSON devem ser citadas duas vezes. Claro, muitas bibliotecas também suportam aspas simples, mas eu tive grandes problemas em um dos meus projetos antes de perceber que a citação única de uma sequência não é, de fato, de acordo com os padrões JSON.

Arne
fonte
5
Isso é muito relevante ao trabalhar com a chamada do jQuery.ajax para um serviço ASP.NET (serviço da Web, método de página ou MVC).
Schmuli 3/03/11
100
Os nomes de propriedade dentro das cordas JSON deve estar entre aspas, mas uma string JSON como um todo pode ser single-citada: var jsonString = '{"key1":"value1"}';(Não que eu recomendo a construção manualmente JSON.)
nnnnnn
51
Você não deve escrever JSON manualmente, se puder .stringify().
Camilo Martin
23
Este aqui é o melhor argumento para sempre usar aspas duplas. JSON deve ter aspas duplas. As outras respostas estão principalmente aconselhando a "ser consistente", o que significa que se alguma parte do idioma forçar realisticamente uma citação dupla, você deve sempre usá-la.
Josh de Qaribou
18
Isso também é relevante ao trabalhar com vários idiomas, onde quase todos os outros idiomas (Java, C, C ++, ...) usam aspas duplas para seqüências de caracteres e aspas simples para caracteres. Prefiro usar a mesma citação geral e, portanto, use aspas duplas para JS. Com anos de digitação, a tecla extra para alternar entre aspas duplas é totalmente irrelevante e, se a sua codificação for restringida pela digitação, você precisará praticar a digitação corretamente.
Lawrence Dol
336

Não existe uma solução melhor ; no entanto, gostaria de argumentar que aspas duplas podem ser mais desejáveis ​​às vezes:

  • Os recém-chegados já estarão familiarizados com aspas duplas do seu idioma . Em inglês, precisamos usar aspas duplas "para identificar uma passagem do texto citado. Se usarmos uma única citação ', o leitor pode interpretá-la mal como uma contração. O outro significado de uma passagem de texto cercada por 'indica o significado "coloquial". Faz sentido permanecer consistente com os idiomas pré-existentes, e isso pode facilitar a aprendizagem e a interpretação do código.
  • As aspas duplas eliminam a necessidade de escapar dos apóstrofos (como nas contrações). Considere a string: "I'm going to the mall", contra a versão de outro modo escapou: 'I\'m going to the mall'.
  • Aspas duplas significam uma sequência em muitos outros idiomas . Quando você aprende um novo idioma como Java ou C, aspas duplas são sempre usadas. Em Ruby, PHP e Perl, cadeias de citação única não implicam escapes de barra invertida, enquanto aspas duplas as suportam.

  • A notação JSON é escrita com aspas duplas.

No entanto, como outros já declararam, é mais importante permanecer consistente.

user1429980
fonte
Seu primeiro ponto sobre o idioma inglês nem sempre é verdadeiro e pode mudar dependendo da localidade / convenção da casa. Os materiais impressos geralmente usam aspas simples para fala e usam outra formatação para grandes blocos de texto entre aspas. Seu significado "coloquial" não é uma definição útil de citações para enfatizar. Além disso, os usuários ingleses geralmente são muito pobres com aspas e apóstrofos.
John Ferguson
2
@JohnFerguson, apenas por esse motivo, pode ser desejável usar aspas duplas para fazer essa diferenciação (entre apóstrofos e passagens citadas).
precisa saber é o seguinte
Eu sou tudo sobre pragmatismo. Devido ao fato de que 1 em cada 100 strings que eu digito ou usa possui aspas duplas, e muitas, muitas outras possuem apóstrofos, eu uso duplas. No final do dia, no entanto, você deve usar o tipo de cotação que 1) já está sendo usado no projeto, se você é um novo desenvolvedor do projeto, ou 2) usar o que você acha que faz mais sentido.
Dudewad
Caso em ponto-- o que eu digitei (existem vários apóstrofos, sem aspas;)
dudewad
FWIW - esta é uma citação de um artigo do Quora: quora.com/…
theUtherSide 11/15/15
118

A seção 7.8.4 da especificação descreve a notação literal de cadeias. A única diferença é que DoubleStringCharacter é "SourceCharacter, mas não aspas duplas" e SingleStringCharacter é "SourceCharacter, mas não aspas simples". Portanto, a única diferença pode ser demonstrada assim:

'A string that\'s single quoted'

"A string that's double quoted"

Portanto, depende da quantidade de cotação que você deseja fazer. Obviamente, o mesmo se aplica a aspas duplas em strings entre aspas duplas.

Gareth
fonte
@ Gareth: eu não estava falando sobre especificações, estava falando sobre um possível impacto no desempenho. stackoverflow.com/questions/242813/…
Mathias Bynens
se você estiver colocando apóstrofos suficientes em seu código para compensar quantas vezes você precisa pressionar shift + ', estará fazendo errado.
SgtPooki
1
E quanto a "{\"name\": \"Peter\"}"vs '{"name": "Peter"}'? É certo que você poderia dizer que essa é a mesma diferença, mas certamente afetaria sua decisão de uma maneira diferente do exemplo acima.
Trevor
@MathiasBynens - Essa é uma observação interessante que não é relevante há pelo menos um ano e talvez até seis anos.
ArtOfWarfare
4
Um deve usar U + 2019 para um apóstrofo, não um single-apóstrofe
jjg
95

Citações simples

Eu gostaria que as aspas duplas fossem o padrão, porque elas fazem um pouco mais de sentido , mas continuo usando aspas simples porque elas dominam a cena.

Citações simples:

Sem preferência:

Aspas duplas:

Alec Mev
fonte
7
Crockford agora prefere aspas duplas.
Adam Calvet Bohl
6
O airbnb agora prefere aspas duplas
Suraj Jain
15
@SurajJain Source? Os guias de estilo do Airbnb e do Google ainda estão listados como preferidos.
Alec Mev
5
@SurajJain Ah, essas são as configurações do verificador de estilo de código, escritas em JSON, que não permitem aspas simples. Lê-los é uma boa maneira de comparar as escolhas feitas por diferentes projetos.
Alec Mev
2
Google agora prefere aspas simples
GabrielOshiro
57

Eu gostaria de dizer que a diferença é puramente estilística, mas estou realmente tendo minhas dúvidas. Considere o seguinte exemplo:

/*
   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);

No Safari, Chrome, Opera e Internet Explorer (testado no IE7 e IE8), isso retornará o seguinte:

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

No entanto, o Firefox produzirá um resultado ligeiramente diferente:

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

As aspas simples foram substituídas por aspas duplas. (Observe também como o espaço de recuo foi substituído por quatro espaços.) Isso dá a impressão de que pelo menos um navegador analisa JavaScript internamente como se tudo estivesse escrito com aspas duplas. Pode-se pensar que o Firefox leva menos tempo para analisar o JavaScript se tudo já estiver escrito de acordo com esse 'padrão'.

O que, a propósito, me deixa um panda muito triste, pois acho que aspas simples parecem muito mais agradáveis ​​no código. Além disso, em outras linguagens de programação, eles costumam ser mais rápidos do que aspas duplas, portanto, só faria sentido se o mesmo se aplicasse ao JavaScript.

Conclusão: acho que precisamos fazer mais pesquisas sobre isso.

Edit: Isso pode explicar os resultados dos testes de Peter-Paul Koch em 2003.

Parece que as aspas simples às vezes são mais rápidas no Explorer Windows (aproximadamente 1/3 dos meus testes mostraram um tempo de resposta mais rápido), mas se o Mozilla mostra alguma diferença, ele manipula aspas duplas um pouco mais rápido. Não encontrei nenhuma diferença no Opera.

Edit 2014: As versões modernas do Firefox / Spidermonkey não fazem mais isso.

Mathias Bynens
fonte
25
Se for um pouco mais rápido em um navegador para fazê-lo de uma maneira e um pouco mais rápido em outro para fazê-lo de outra maneira, parece que a única orientação que podemos tirar disso é que devemos fazer o que quisermos, porque isso prejudicará alguns usuários e ajudar outras pessoas, e a quantidade de diferença provavelmente será imperceptível. "Otimização prematura ..." e tudo isso.
Andrew Hedges
2
Sinto muito, meu comentário não foi mais construtivo. Estou apenas dizendo que a maneira como o navegador escolhe exibir sua representação interna da sintaxe provavelmente tem muito pouco a ver com a forma como é analisada e, portanto, provavelmente não é uma razão para preferir um tipo de aspas em detrimento do outro. Por outro lado, os dados de desempenho comparando os tempos de análise para aspas simples e duplas nos navegadores seriam mais atraentes.
Chris Calo
1
Esta é uma resposta impressionante, uma pausa do resto que apenas grita 'Eles são iguais, eles são iguais' ... Você disse: "Além disso, em outras linguagens de programação, eles geralmente são mais rápidos de usar do que o dobro aspas " , posso perguntar quais idiomas? Eu usei langs regulares como Java e C #, nunca vi outro além de JS que aceite literais de cadeia de caracteres entre aspas simples. Os compartimentos de aspas simples são geralmente usados ​​apenas para constantes de caracteres (apenas um caractere permitido).
ADTC
3
AFAIK isso foi corrigido no Firefox 17, o Firefox costumava fazer a descompilação ao fazer, .toStringmas agora retorna a cópia original. O Firefox moderno não terá esse problema.
Benjamin Gruenbaum
3
Não sei sobre diferenças de velocidade. Mas gostaria de observar que "isso dá a impressão de que pelo menos um navegador analisa JavaScript internamente como se tudo estivesse escrito com aspas duplas". é um absurdo. É analisado como se estivesse escrito com aspas duplas. Ou seja, transformou sua representação interna (que apenas armazena a string, não as aspas) em uma versão legível por humanos, para a qual, por acaso, usa um conjunto de aspas. De qualquer forma, isso parece ter mudado, conforme o comentário de Benjamin.
Subsub
32

Se você estiver usando JavaScript embutido (sem dúvida uma coisa "ruim", mas evitando essa discussão), as aspas simples são sua única opção para literais de string, acredito.

por exemplo, isso funciona bem:

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

Mas você não pode agrupar o "oi" entre aspas duplas, por qualquer método que eu saiba. Mesmo &quot;qual teria sido meu melhor palpite (já que você está escapando de aspas em um valor de atributo de HTML) não funciona para mim no Firefox. \"também não funcionará porque, neste momento, você está escapando para HTML, não para JavaScript.

Portanto, se o nome do jogo for consistente e você usar JavaScript embutido em partes do seu aplicativo, acho que as aspas simples são as vencedoras. Alguém por favor me corrija se eu estiver errado.

Tom Lianza
fonte
8
Concordei em ser indiscutivelmente uma coisa ruim, no entanto, se for necessário, tenho certeza de que a codificação no estilo da URL pode ser usada, por exemplo <a onclick="alert(%22hi%22);">hi</a>- a partir da memória, isso funciona, embora possa estar no atributo href<a href="javascript:alert(%22hi%22);">hi</a>
Graza
2
@PhiLho, você está certo sobre isso ... Eu estava assumindo que as pessoas escreviam atributos HTML com aspas duplas convencionais e não iam (1) converter por atacado tudo em aspas simples ou (2) misturar e combinar atributos com aspas simples e duplas. Mas sim, você está certo é legal
Tom Lianza
4
@ Tom Lianza, certamente alert(&quot;hi&quot;)não é JavaScript válido. Mas os valores dos atributos são codificados. w3.org/TR/html4/intro/sgmltut.html#didx-attribute
Robert
4
Concordou com @Robert aqui. &quot;é a maneira correta de escapar de aspas duplas dentro de um atributo HTML. Funciona bem no Firefox. @ Denilson, XML (e, portanto, XHTML) permite aspas simples e duplas. Veja o AttValueliteral na especificação XML em w3.org/TR/REC-xml/#d0e888 .
22612 Chris Calo
1
@ Pacener: Porque não está errado. Existe uma convenção em HTML para colocar atributos entre aspas duplas.
Konrad Borowski 25/05
30

Tecnicamente, não há diferença, é apenas uma questão de estilo e convenção.

Douglas Crockford recomenda o uso de aspas simples para strings internas e aspas duplas para externas (por externas, queremos dizer aquelas que serão exibidas ao usuário do aplicativo, como mensagens ou alertas).

Eu pessoalmente sigo isso.

ATUALIZAÇÃO: Parece que o Sr. Crockford mudou de idéia e agora recomenda o uso de aspas duplas em todo :)

Mariusz Nowak
fonte
13
Douglas Crockford vs JQuery. Escolha o seu veneno.
Eric Eric
Qual é o raciocínio de Crockford para isso?
BadHorsie
1
Esta é a convenção que sigo. É uma preferência mais pessoal. Eu gosto de usar strings entre aspas simples para coisas internas, como seletores jQuery, e / ou coisas como getElementById ('id') ;, eu gosto da aparência com aspas simples. Porém, mude para aspas duplas para texto externo, pois geralmente pode conter aspas internas no texto. Além disso, facilita identificar e diferenciar cadeias externas versus cadeias internas se você estiver tentando encontrar um erro em uma ou outra.
Adimauro
3
A partir de abril de 2016, Douglas Crockford agora recomenda o uso de aspas duplas, já que, na prática, muitos desenvolvedores acharam difícil a dicotomia interna versus externa.
Thunderforge
27

A rigor, não há diferença de significado; então a escolha se resume à conveniência.

Aqui estão vários fatores que podem influenciar sua escolha:

  • Estilo interno: alguns grupos de desenvolvedores já usam uma convenção ou outra.
  • Requisitos do lado do cliente: você usará aspas dentro das strings? (Veja a resposta de Ady).
  • Linguagem do lado do servidor: o pessoal do VB.Net pode optar por usar aspas simples para java-script, para que os scripts possam ser criados no lado do servidor (o VB.Net usa aspas duplas para seqüências de caracteres, para facilitar a distinção entre as seqüências de caracteres do script java. se eles usam aspas simples).
  • Código da biblioteca: se você estiver usando uma biblioteca que usa um estilo específico, considere usar o mesmo estilo.
  • Preferência pessoal: você pode pensar que um ou outro estilo fica melhor.
Kramii
fonte
Não é verdade, 'está 00100111em binário, enquanto "está 00100010em binário. Assim, as aspas duplas ocupam metade do poder de armazenamento que as aspas simples. Essa é a diferença ali.
19

Vejamos o que uma referência faz.

Dentro do jquery.js, todas as strings são aspas duplas.

Então, a partir de agora, usarei cadeias de caracteres com aspas duplas. (Eu estava usando single!)

Frederic
fonte
11
Por que isso foi votado? Essa é uma questão de estilo e o melhor é ser consistente e seguir aqueles que vieram antes de você.
Eric Eric
2
+1 A documentação da API do jQuery também. Esta foi a única razão pela qual me decidi por aspas duplas. Pessoalmente, acho que as respostas de que "tudo se resume à preferência pessoal" são um pouco falhas - o melhor é descobrir uma convenção amplamente usada e cumpri-la. E como posso copiar e colar exemplos do jQuery (direta ou indiretamente), não quero substituir as aspas todas as vezes.
Steve Chambers
2
Talvez o jQuery não tenha seguido as pessoas à sua frente (ou realmente não se importou, como a maioria dos outros especialistas). ;)
James Wilkins
14

Apenas mantenha a consistência no que você usa. Mas não diminua seu nível de conforto.

"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

Atualização ES6

Usando a sintaxe literal do modelo .

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

É principalmente uma questão de estilo e preferência. Existem algumas explorações técnicas bastante interessantes e úteis nas outras respostas, então talvez a única coisa que eu possa acrescentar seja oferecer um pequeno conselho mundano.

  • Se você estiver codificação em uma empresa ou equipe, então provavelmente é uma boa idéia seguir a "casa de estilo".

  • Se você está sozinho cortar alguns projetos paralelos, em seguida, olhar para alguns líderes proeminentes da comunidade. Por exemplo, digamos que você entre no Node.js. Dê uma olhada nos módulos principais, por exemplo, underscore.js ou express e veja qual convenção eles usam, e considere seguir isso.

  • Se ambas as convenções são igualmente utilizados, em seguida, adiar para o seu pessoal
    preferência.

  • Se você não tem preferência pessoal, em seguida, jogar uma moeda.

  • Se você não tem uma moeda, então a cerveja está em mim;)

cavalgada
fonte
13

Espero que eu não estou adicionando algo óbvio, mas eu tenho lutado com Django e Ajax e JSON sobre este assunto.

Supondo que em seu código HTML você use aspas duplas, como normalmente deveria ser, sugiro usar aspas simples para o restante em JavaScript.

Então, eu concordo com @ady, mas com alguns cuidados.

Minha conclusão é: No JavaScript, provavelmente não importa, mas assim que você o incorpora ao HTML ou algo semelhante, você começa a ter problemas. Você deve saber o que realmente está escapando, lendo, passando sua string.

Meu caso simples foi:

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>'

Você pode identificar o \ 'no terceiro campo do showThis.

As aspas duplas não funcionaram!

Está claro o porquê, mas também está claro por que devemos ficar com aspas simples ... .. eu acho ..

Nesse caso, é uma incorporação HTML muito simples, o erro foi gerado por uma cópia / colar simples a partir de um código JavaScript 'com aspas duplas'.

Então, para responder à pergunta:

Tente usar aspas simples enquanto estiver em HTML. Pode salvar alguns problemas de depuração ...

mario
fonte
1
Corri para um problema semelhante com a interpolação de strings ES6 (backticks). Meu sistema de compilação o compilou em uma string de aspas duplas, que quebrou um cabeçalho de Auth que estava trabalhando com aspas simples!
Jay
12

Não tenho certeza se isso é relevante no mundo de hoje, mas as aspas duplas costumavam ser usadas para conteúdo que precisava ter caracteres de controle processados ​​e aspas simples para strings que não eram.

O compilador executará a manipulação de cadeias de caracteres em uma cadeia de caracteres dupla entre aspas, deixando uma única cadeia de caracteres entre aspas literalmente intocada. Isso costumava levar os desenvolvedores 'bons' a optarem por usar aspas simples para strings que não continham caracteres de controle como \nou \0(não processados ​​entre aspas simples) e aspas duplas quando precisavam que a string fosse analisada (a um pequeno custo em ciclos de CPU para processando a string).

garysb
fonte
14
Não é que as coisas costumavam ser feitas de uma maneira e agora elas são feitas de outra maneira. Idiomas diferentes lidam com aspas de maneira diferente, e alguns funcionam como você descreve. Mas esta é uma pergunta sobre JavaScript . As aspas simples e duplas são tratadas de maneira idêntica no JavaScript (exceto para permitir que o outro tipo de aspas seja usado em uma sequência sem escapar). Não há questão de aspas duplas, permitindo caracteres de controle ou interpolação de string. JavaScript não funciona assim. Os caracteres de controle e as seqüências de escape funcionam da mesma maneira que qualquer citação usada.
Michael Geary
Como um ex-programador do Perl, é isso que eu continuo pensando, embora eu saiba que é irrelevante em JS.
Zkent
12

Se você estiver usando jshint , ocorrerá um erro se você usar uma cadeia de aspas duplas.

Usei-o através do suporte Yeoman do AngularJS, mas talvez exista alguma maneira de configurar isso.

A propósito, quando você manipula HTML em JavaScript, é mais fácil usar aspas simples:

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

E pelo menos o JSON está usando aspas duplas para seqüências reprensivas.

Não há uma maneira trivial de responder à sua pergunta

MetallimaX
fonte
A implementação jshint mudou? já que o site de demonstração parece aceitar isso sem lançar nenhum aviso / erro e não consigo encontrar opções para restringir o uso do jshint. Talvez essa resposta esteja desatualizada ou imprecisa?
Lea Hayes
Se o jshint gera um erro para uma cadeia de caracteres entre aspas duplas, ela está seriamente quebrada. O padrão JavaScript define o que está correto, e não algum linter quebrado.
Mecki 23/03
10

Falando sobre desempenho, as cotações nunca serão o seu gargalo, no entanto, o desempenho é o mesmo nos dois casos.

Falando sobre a velocidade de codificação, se você usar 'para delimitar uma string, precisará escapar de "aspas. É mais provável que você precise usar "dentro da string, por exemplo:

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

Então, eu prefiro usar 'para delimitar a string, então tenho que escapar menos caracteres.

Juan C. Roldán
fonte
10

Uma razão (boba) para usar aspas simples seria que elas não exigem que você pressione a tecla Shift para digitá-las, enquanto as aspas duplas o fazem. (Estou supondo que a string média não exija escape, o que é uma suposição razoável.) Agora, vamos supor que todos os dias eu codifique 200 linhas de código. Talvez nessas 200 linhas eu tenha 30 citações. Talvez digitar uma aspas duplas leve 0,1 segundos a mais do que digitar uma aspas simples (porque eu tenho que pressionar a tecla Shift). Então, em qualquer dia, eu perco 3 segundos. Se eu codifico dessa maneira por 200 dias por ano por 40 anos, perdi 6,7 horas da minha vida. Alimento para o pensamento.

John Kurlak
fonte
1
Eu acho que você está apenas se referindo ao layout do teclado em inglês aqui ... Eu tenho um alemão, tenho que pressionar Shift para ambos. De qualquer forma, não vejo por que pressionar a tecla Shift adiciona tempo ao processo. Apertei shift com a mão esquerda e pressione a tecla de citação com a direita. Isso acontece ao mesmo tempo, para mim não há diferença.
Codwandler # 16/15
1
@codewandler Ainda existe o custo de pressionar a tecla Shift, mesmo que você possa pressioná-la paralelamente à tecla ". Isso força você a afastar um dedo da posição padrão. Por exemplo, suponha que você esteja digitando: var description = "This is a \"quick\" test";on um teclado inglês.Para um teclado inglês, seu dedo mindinho deve passar da tecla Shift esquerda para a tecla Q na linha superior, em vez de passar da tecla A para a tecla Q. Em outras palavras, ele deve percorrer o dobro da distância . Eu não tenho certeza onde estão as chaves no teclado alemão, mas eu tenho certeza que é um exemplo análogo.
John Kurlak
2
@codewandler Além disso, ter que digitar turno, mesmo se eu posso fazê-lo em paralelo, não permite que o dedo mindinho esquerdo para se preparar para digitar o próximo caractere após "em tudo o que você está digitando.
John Kurlak
1
A idéia de "desperdício de tempo" é um pouco tola, mas a idéia de menor esforço ergonômico (especialmente na era da síndrome do túnel do carpelo, etc.) faz com que seja um bom ganho, especialmente nos casos em que de outra forma não importa. Dadas mais de 1.000 linhas de código por dia, isso poderia economizar centenas de curvas diárias.
Beejor
9

Examinando os prós e contras

A favor de aspas simples

  • Menos confusão visual.
  • Gerando HTML: os atributos HTML geralmente são delimitados por aspas duplas.

elem.innerHTML = '<a href="' + url + '">Hello</a>';
No entanto, aspas simples são igualmente legais em HTML.

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

Além disso, o HTML embutido é normalmente um anti-padrão. Preferir modelos.

  • Gerando JSON: Somente aspas duplas são permitidas em JSON.

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

Novamente, você não precisa construir o JSON dessa maneira. JSON.stringify () geralmente é suficiente. Caso contrário, use modelos.

A favor de aspas duplas

  • As duplas são mais fáceis de identificar se você não tiver código de cores. Como em um log do console ou algum tipo de configuração da fonte de exibição.
  • Semelhança com outras linguagens: Na programação de shell (Bash etc.), existem literais de string com aspas simples, mas as fugas não são interpretadas dentro delas. C e Java usam aspas duplas para seqüências de caracteres e aspas simples para caracteres.
  • Se você deseja que o código seja JSON válido, é necessário usar aspas duplas.

A favor de ambos

Não há diferença entre os dois em JavaScript. Portanto, você pode usar o que for conveniente no momento. Por exemplo, os seguintes literais de sequência produzem a mesma sequência:

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

Aspas simples para cadeias internas e duplas para externas. Isso permite distinguir constantes internas das seqüências que serão exibidas para o usuário (ou gravadas no disco etc.). Obviamente, você deve evitar colocar o último em seu código, mas isso nem sempre pode ser feito.

Divyesh Kanzariya
fonte
8

Mais uma coisa que você pode considerar como uma razão para a mudança de aspas duplas para aspas simples é o aumento da popularidade dos scripts do lado do servidor. Ao usar o PHP, você pode passar variáveis ​​e analisar funções javascript usando strings e variáveis ​​no PHP.

Se você escrever uma string e usar aspas duplas no seu PHP, não precisará escapar de nenhuma das aspas simples e o PHP recuperará automaticamente o valor das variáveis ​​para você.

Exemplo: preciso executar uma função javascript usando uma variável do meu servidor.

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

Isso me poupa muito trabalho em ter que lidar com a junção de strings, e posso chamar efetivamente um javascript do PHP. Este é apenas um exemplo, mas esse pode ser um dos vários motivos pelos quais os programadores estão usando aspas simples em javascript.

Cite documentos PHP : "O recurso mais importante das strings com aspas duplas é o fato de os nomes das variáveis ​​serem expandidos. Consulte a análise de strings para obter detalhes."

Dodzi Dzakuma
fonte
+1, faço isso no meu projeto MVC.Net para que as aspas duplas do C # não interfiram nas aspas simples do javascript e vice-versa.
DCShannon
3
Eu acho que se você estiver escrevendo JavaScript em sua página a partir de um método de classe PHP, terá maiores problemas.
BadHorsie 02/08/2015
6

Há pessoas que afirmam ter diferenças de desempenho: segmento antigo da lista de discussão . Mas não consegui encontrar nenhum deles para ser confirmado.

O principal é analisar que tipo de aspas (duplas ou simples) você está usando dentro da sua string. Ajuda a manter baixo o número de fugas. Por exemplo, quando você trabalha com html dentro de suas strings, é mais fácil usar aspas simples, para que você não precise escapar de todas as aspas duplas ao redor dos atributos.

Michiel Overeem
fonte
Embora atributos podem ser bem cercado com aspas simples :)
Damir Zekic
Você está certo, pensei que xml e xhtml prescrevessem aspas duplas em torno de atributos, mas aspas simples são permitidas.
Michiel Overeem
6

Eu usaria aspas duplas quando aspas simples não puderem ser usadas e vice-versa:

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

Ao invés de:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
quiabo
fonte
Que tal uma string contendo tanto aspas simples e aspas duplas como O'rea "lly
sudhAnsu63
6

Não há diferença entre aspas simples e duplas no JavaScript.

A especificação é importante:

Talvez haja diferenças de desempenho, mas elas são absolutamente mínimas e podem mudar todos os dias de acordo com a implementação dos navegadores. Discussões adicionais são inúteis, a menos que seu aplicativo JavaScript tenha centenas de milhares de comprimento.

É como uma referência se

a=b;

é mais rápido que

a = b;

(espaços extras)

hoje, em um navegador e plataforma específicos, etc.

mauro
fonte
2
sem espaços é mais rápido. menos caracteres para analisar na cadeia. : p
pilavdzice
6

Ao usar o CoffeeScript, uso aspas duplas. Concordo que você deve escolher um deles e cumpri-lo. O CoffeeScript fornece interpolação ao usar aspas duplas.

"This is my #{name}"

O ES6 está usando back ticks (`) para seqüências de caracteres de modelo. O que provavelmente tem um bom motivo, mas, ao codificar, pode ser complicado alterar o caractere literal de string de aspas ou aspas duplas para back ticks para obter o recurso de interpolação. O CoffeeScript pode não ser perfeito, mas usar o mesmo caractere de literal de string em todos os lugares (aspas duplas) e sempre poder interpolar é um recurso interessante.

`This is my ${name}`
GijsjanB
fonte
Para mim o carrapato volta é um vencedor claro neste concurso, (quase) nenhuma presença dentro de cadeias de texto comuns, além de var interpolação
Simone Poggi
5

Se você está alternando entre JavaScript e C #, é melhor treinar os dedos para a convenção comum, que é aspas duplas.

moomoo
fonte
5

Eu estive executando o seguinte cerca de 20 vezes. E parece que aspas duplas são cerca de 20% mais rápidas.

A parte divertida é que, se você alterar as partes 2 e 1, as aspas simples são cerca de 20% mais rápidas.

//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));
Bastiaan Linders
fonte
31
Em outras palavras, você descobriu que o código posterior roda mais rápido. Esse é o problema ao fazer micro-benchmarks. Você deve considerar o mecanismo JS que otimiza o código enquanto ele é executado. (Você verá este mesmo efeito quando o benchmarking Java devido à forma como o JIT funciona.)
David Phillips
4
primeiro new Date é lento, adicione var dummy_date = new Date()a começar
Lauri
1
O nível de micro otimização aqui é tão tolo que você também pode argumentar que aspas simples são mais rápidas de digitar, levando a um desenvolvimento mais rápido.
Beejor
4

Não há nenhuma diferença estrita; portanto, é principalmente uma questão de gosto e do que está na string (ou se o próprio código JS estiver em uma string), para manter baixo o número de escapes.

A legenda da diferença de velocidade pode vir do mundo PHP, onde as duas aspas têm um comportamento diferente.

PhiLho
fonte
E Ruby, devo acrescentar. Python tem o mesmo comportamento que JavaScript: nenhuma diferença é feita entre aspas simples / duplas.
Damir Zekić 28/10/08
4

Depois de ler todas as respostas que dizem que talvez seja mais rápido ou que tenha vantagens, eu diria que as aspas duplas são melhores ou talvez mais rápidas também porque o compilador de fechamento do Google converte aspas simples em aspas duplas.

Mohsen
fonte
Você sabe por que isso acontece?
precisa saber é o seguinte
Eu não sei. Talvez seja uma convenção de codificação e nada de especial.
Mohsen
4

Agora que é 2020, devemos considerar uma terceira opção para o Javascript: o backtick único para tudo.

Isso pode ser usado em qualquer lugar, em vez de aspas simples ou duplas.

Ele permite que você faça todas as coisas!

  1. Incorpore aspas simples dentro dele: `É ótimo!`
  2. Coloque aspas duplas dentro dele: `É" realmente "ótimo!`
  3. Use a interpolação de strings: `É" $ {better} "do que ótimo!`
  4. Permite várias linhas: `

    este

    Faz

    Javascript

    Melhor!

    `

Também não causa perda de desempenho ao substituir os outros dois: https://medium.com/javascript-in-plain-english/are-backticks-slower-than-other-strings-in-javascript-ce4abf9b9fa

OCDev
fonte
3

Se sua fonte JS for:

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

A fonte HTML será:

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

ou para HTML5

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

JS permite matrizes assim:

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

Mas se você o especificar, será por uma razão compatível:

JSON=["this","that"]

Tenho certeza que isso leva algum tempo.

BF
fonte
3

Apenas para adicionar meus 2 centavos: Ao trabalhar com JS e PHP há alguns anos, me acostumei a usar aspas simples para poder digitar o caractere de escape ('\') sem precisar escapar também. Normalmente, eu o usava ao digitar cadeias brutas com caminhos de arquivo etc. ( http://en.wikipedia.org/wiki/String_literal#Raw_strings )

De qualquer forma, minha convenção acabou se tornando o uso de aspas simples em cadeias brutas do tipo identificador, como if (typeof s == 'string') ...(nas quais caracteres de escape nunca seriam usados ​​- nunca) e aspas duplas nos textos , como "Ei, e aí?". Também uso aspas simples nos comentários como uma convenção tipográfica para mostrar nomes de identificadores. Esta é apenas uma regra de ouro e interrompo apenas quando necessário, como ao digitar seqüências de caracteres HTML '<a href="#"> like so <a>'(embora você também possa reverter as aspas aqui). Também sei que, no caso do JSON, aspas duplas são usadas para os nomes - mas fora disso, pessoalmente, prefiro aspas simples quando a fuga nunca é necessária para o texto entre aspas - como document.createElement('div').

Resumindo, e como alguns já mencionaram / aludiram, escolha uma convenção, cumpra-a e desvie-se apenas quando necessário.

James Wilkins
fonte