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.