Kiedy należy używać podwójnych lub pojedynczych cudzysłowów w JavaScript?

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

Widzę coraz więcej bibliotek JavaScript, które używają pojedynczych cudzysłowów podczas obsługi łańcuchów. Jakie są powody, aby używać jednego nad drugim?

Myślałem, że są wymienne.
Author: Peter Mortensen, 2008-10-28

30 answers

Najbardziej prawdopodobnym powodem użycia single vs. double w różnych bibliotekach są preferencje programistów i / lub spójność API. Poza tym, że jest spójny, użyj tego, co najlepiej pasuje do ciągu.

Użycie innego typu cytatu jako dosłownego:

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

To może się skomplikować:

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

Inną opcją, nową w ECMAScript 6, jest literały szablonów, które używają znaku backtick :

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

Literały szablonów oferują czystą składnię dla: zmiennej interpolacja, ciągi Wielowierszowe i wiele innych.

Zauważ, że JSON jest formalnie określony do używania podwójnych cudzysłowów, co może być warte rozważenia w zależności od wymagań systemowych.

 1266
Author: Beau Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-18 10:26:19

Jeśli masz do czynienia z JSON, należy zauważyć, że ściśle mówiąc, ciągi JSON muszą być podwójnie cytowane. Oczywiście, wiele bibliotek obsługuje również pojedyncze cytaty, ale miałem duże problemy w jednym z moich projektów, zanim zdałem sobie sprawę, że pojedyncze cytowanie ciągu znaków nie jest w rzeczywistości zgodne ze standardami JSON.

 633
Author: Arne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-06 07:59:46

Nie ma lepszego rozwiązania ; jednak chciałbym argumentować, że podwójne cudzysłowy mogą być czasami bardziej pożądane:

  • Nowi użytkownicy będą już zaznajomieni z podwójnymi cudzysłowami ze swojego języka . W języku angielskim musimy używać podwójnych cudzysłowów ", aby zidentyfikować fragment cytowanego tekstu. Jeśli użyjemy pojedynczego cytatu ', czytelnik może błędnie zinterpretować go jako skurcz. Inne znaczenie fragmentu tekstu otoczonego ' wskazuje na "potoczne" znaczenie. Zachowanie zgodności z istniejącymi językami ma sens, co może ułatwić naukę i interpretację kodu.
  • podwójne cudzysłowy eliminują potrzebę ucieczki apostrofów (jak w skurczach). Rozważmy ciąg znaków: "I'm going to the mall", A wersję z klauzulą ucieczki: 'I\'m going to the mall'.
  • Podwójne cudzysłowy oznaczają ciąg znaków w wielu innych językach . Kiedy uczysz się nowego języka, takiego jak Java lub C, zawsze używane są podwójne cudzysłowy. W Ruby, PHP i W Perlu, pojedyncze cytowane ciągi znaków nie zawierają znaków odwrotnego ukośnika, podczas gdy podwójne cudzysłowy je obsługują.

  • Notacja JSON jest pisana podwójnymi cudzysłowami.

Niemniej jednak, jak stwierdzili inni, najważniejsze jest zachowanie spójności.

 350
Author: user1429980,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 12:13:22

Sekcja 7.8.4 specyfikacji opisuje literalną notację ciągu znaków. Jedyną różnicą jest to, że DoubleStringCharacter to "SourceCharacter, ale nie double-quote", a SingleStringCharacter to "SourceCharacter, ale nie single-quote". Tak więc tylko różnica może być wykazana w ten sposób:

'A string that\'s single quoted'

"A string that's double quoted"

Więc to zależy od tego, ile cytatu chcesz zrobić. Oczywiście to samo dotyczy podwójnych cudzysłowów w podwójnych cytowanych ciągach.

 121
Author: Gareth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-28 18:02:49

Pojedyncze Cytaty

Chciałbym, aby podwójne cytaty były standardem, ponieważ mają trochę więcej sensu , ale używam pojedynczych cytatów, ponieważ dominują w scenie.

Pojedyncze cytaty:

Brak preferencji:

Podwójne cytaty:

 102
Author: Alec Mev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 20:43:59

Chciałbym powiedzieć, że różnica jest czysto stylistyczna, ale naprawdę mam wątpliwości. Rozważ następujący przykład:

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

W przeglądarkach Safari, Chrome, Opera i Internet Explorer (testowane w Internet Explorer 7 i Internet Explorer 8), zwróci to następujące wartości:

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

Jednak Firefox da nieco inny wynik:

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

Pojedyncze cudzysłowy zostały zastąpione podwójnymi cudzysłowami. (Zwróć również uwagę, jak przestrzeń wcięcia została zastąpiona przez cztery miejsca.) Sprawia to wrażenie, że co najmniej jedna przeglądarka przetwarza JavaScript wewnętrznie tak, jakby wszystko zostało napisane przy użyciu podwójnych cudzysłowów. można by pomyśleć, że przeglądanie JavaScript zajmuje Firefoksowi mniej czasu, jeśli wszystko jest już napisane zgodnie z tym 'standardem'.

Co, nawiasem mówiąc, czyni mnie bardzo smutną pandą, ponieważ myślę, że pojedyncze cytaty wyglądają o wiele ładniej w kodzie. Poza tym w innych językach programowania są one zwykle szybsze w użyciu niż podwójne cudzysłowy, więc tylko sens jeśli to samo dotyczy JavaScript.

Wniosek: myślę, że musimy zrobić więcej badań na ten temat.

To może wyjaśniać wyniki testów Petera-Paula kocha z 2003 roku.

Wydaje się, że pojedyncze cudzysłowy są czasami szybsze w oknach Eksploratora (mniej więcej 1/3 moich testów wykazało szybszy czas odpowiedzi), ale jeśli Mozilla w ogóle wykazuje różnicę, obsługuje podwójne cudzysłowy nieco szybciej. Nie znalazłem żadnej różnicy w Opera.

2014: współczesne wersje Firefoksa / Spidermonkey już tego nie robią.

 58
Author: Mathias Bynens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-18 10:07:22

Jeśli robisz Inline JavaScript (prawdopodobnie " zła " rzecz, ale unikając tej dyskusji) pojedyncze cudzysłowy są jedyną opcją dla literałów ciągów, wierzę.

Np. to działa dobrze:

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

Ale nie możesz zawinąć "cześć" podwójnymi cudzysłowami, za pomocą żadnej znanej mi metody ucieczki. Parzyste &quot; co byłoby moim najlepszym zdaniem (ponieważ unikasz cudzysłowów w wartości atrybutu HTML) nie działa dla mnie w Firefoksie. " nie zadziała też ponieważ w tym momencie uciekasz dla HTML, a nie JavaScript.

Więc, jeśli nazwa gry jest spójność, i masz zamiar zrobić kilka Inline JavaScript w częściach aplikacji, myślę, że pojedyncze cytaty są zwycięzcą. Niech ktoś mnie poprawi, jeśli się mylę.

 32
Author: Tom Lianza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 17:58:43

Technicznie nie ma różnicy. To tylko kwestia stylu i konwencji.

Douglas Crockford zaleca używanie pojedynczych cudzysłowów dla ciągów wewnętrznych i podwójnych cudzysłowów dla zewnętrznych (przez zewnętrzne rozumiemy te, które mają być wyświetlane użytkownikowi aplikacji, np. wiadomości lub Alerty).

Ja osobiście za tym podążam.

Aktualizacja: wygląda na to, że Pan Crockford zmienił zdanie i zaleca teraz używanie podwójnych cudzysłowów w całym :)

 30
Author: Mariusz Nowak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 19:22:17

Ściśle mówiąc, nie ma różnicy w znaczeniu; więc wybór sprowadza się do wygody.

Oto kilka czynników, które mogą wpłynąć na twój wybór:

  • Styl Domu: niektóre grupy deweloperów używają już jednej lub drugiej konwencji.
  • wymagania Po stronie klienta: czy będziesz używać cudzysłowów w łańcuchach? (Zobacz odpowiedź Ady .)
  • język po stronie serwera: VB.NET ludzie mogą wybrać użycie pojedynczych cudzysłowów dla JavaScript, aby Skrypty mogły be built server-side (VB.NET używa podwójnych cudzysłowów dla łańcuchów, więc łańcuchy JavaScript są łatwe do odróżnienia, jeśli używają pojedynczych cudzysłowów).
  • kod biblioteki: jeśli używasz biblioteki, która używa określonego stylu, możesz rozważyć użycie tego samego stylu.
  • osobiste preferencje: możesz pomyśleć, że jeden lub inny styl wygląda lepiej.
 27
Author: Kramii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 17:51:28

Spójrzmy, co robi odniesienie.

Wewnątrz jquery.js, każdy ciąg jest podwójnie cytowany.

Więc, zaczynając od teraz, użyję podwójnych cytowanych ciągów. (Używałem singla!)

 19
Author: Frederic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 19:32:41

Zachowaj spójność w tym, czego używasz. Ale nie zawiedź swojego poziomu komfortu.

"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

ECMAScript 6 update

Używając składni szablonu .

`Be "my" guest. You're in complete freedom.`; // Most comfort :D
 15
Author: abhisekp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 20:30:51

Mam nadzieję, że nie dodaję czegoś oczywistego, ale zmagam się z Django, Ajax i JSON na tym.

Zakładając, że w kodzie HTML używasz podwójnych cudzysłowów, jak zwykle powinno być, sugeruję użycie pojedynczych cudzysłowów dla reszty w JavaScript.

Więc zgadzam się z ady , ale z pewną ostrożnością.

Moje podsumowanie to:

W JavaScript to prawdopodobnie nie ma znaczenia, ale jak tylko osadzić go w HTML lub tym podobne zaczynasz mieć kłopoty. Powinieneś wiedzieć, co tak naprawdę jest ucieczką, czytaniem, przekazywaniem twojego Sznurka.

Mój prosty przypadek to:

tbox.innerHTML = tbox.innerHTML + '<div class="thisbox_des" style="width:210px;" onmouseout="clear()"><a href="/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>'

Możesz zauważyć ' w trzecim polu showThis.

Podwójny cytat nie zadziałał!

Jest jasne, dlaczego, ale jest również jasne, dlaczego powinniśmy trzymać się pojedynczych cytatów... Chyba tak...

Ten przypadek jest bardzo prostym osadzaniem HTML, a błąd został wygenerowany przez proste kopiowanie/wklejanie z "podwójnego cytowanego" kodu JavaScript.

Więc aby odpowiedzieć na pytanie:

Spróbuj użyć pojedynczych cudzysłowów w HTML. Może to zaoszczędzić kilka problemów z debugowaniem...

 14
Author: mariotti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-18 10:12:45

To głównie kwestia stylu i preferencji. W innych odpowiedziach jest kilka ciekawych i przydatnych poszukiwań technicznych, więc być może jedyne, co mogę dodać, to zaoferować trochę światowych rad.

  • Jeśli kodujesz w firmie lub zespole, to prawdopodobnie dobrym pomysłem jest podążanie za "stylem domu".

  • Jeśli jesteś sam hakując kilka projektów pobocznych, to spójrz na kilku wybitnych przywódców w społeczność. Na przykład, załóżmy, że dostajesz się do węzła.js . Spójrz na podstawowe moduły, na przykład podkreślenie.js lub wyrazić i zobaczyć, jakiej konwencji używają, i rozważyć następujące.

  • Jeśli {[6] } obie konwencje są jednakowo używane, to odstaw do osobistych preferencji.

  • Jeśli nie masz żadnych osobistych preferencji, to rzuć monetą.

  • Jeśli nie masz monety, to piwo na mój koszt;)

 13
Author: cavalcade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 19:31:29

Nie jestem pewien, czy jest to istotne w dzisiejszym świecie, ale podwójne cudzysłowy były używane do treści, które wymagały przetwarzania znaków sterujących, a pojedyncze cudzysłowy do ciągów, które nie były.

Kompilator uruchomi manipulację łańcuchami na podwójnym cytowanym łańcuchu, pozostawiając pojedynczy cytowany łańcuch dosłownie nietknięty. Doprowadziło to do tego, że 'dobrzy' programiści zdecydowali się używać pojedynczych cudzysłowów do ciągów znaków, które nie zawierały znaków kontrolnych, takich jak \n lub \0 (nie przetwarzane w pojedyncze cudzysłowy) i podwójne cudzysłowy, gdy wymagały przetworzenia ciągu znaków (przy niewielkim koszcie w cyklach procesora do przetworzenia łańcucha).

 12
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 19:39:48

Jeśli używasz JSHint , spowoduje to błąd, jeśli użyjesz podwójnego cytowanego ciągu.

Użyłem go przez rusztowanie AngularJS, ale może jest jakiś sposób, aby to skonfigurować.

Przy okazji, kiedy obsługujesz HTML do JavaScript, łatwiej jest użyć pojedynczego cytatu:

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

I przynajmniej JSON używa podwójnych cudzysłowów do reprezentowania łańcuchów.

Nie ma trywialnej odpowiedzi na twoje pytanie.
 12
Author: MetallimaX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 20:03:19

Jednym (głupim) powodem używania pojedynczych cudzysłowów byłoby to, że nie wymagają wciśnięcia klawisza shift, aby je wpisać, podczas gdy podwójny cudzysłów tak. (Zakładam, że średni ciąg znaków nie wymaga ucieczki, co jest rozsądnym założeniem. Załóżmy, że każdego dnia koduję 200 linijek kodu. Może w tych 200 linijkach mam 30 cytatów. Może wpisanie podwójnego cytatu zajmuje 0,1 sekundy więcej czasu niż wpisanie pojedynczego cytatu (bo muszę wcisnąć klawisz shift). Wtedy każdego dnia, ja zmarnuj 3 sekundy. Jeśli koduję w ten sposób przez 200 dni w roku przez 40 lat, to zmarnowałem 6,7 godziny mojego życia. Pokarm do myślenia.

 10
Author: John Kurlak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 03:59:33

Mówiąc o wydajności, cytaty nigdy nie będą Twoim wąskim gardłem. Jednak wydajność jest taka sama w obu przypadkach.

Mówiąc o szybkości kodowania, jeśli używasz ' do rozgraniczania łańcucha znaków, będziesz musiał uciec " cudzysłowów. Bardziej prawdopodobne jest, że będziesz musiał użyć " wewnątrz łańcucha. Przykład:

// JSON Objects:
var jsonObject = '{"foo":"bar"}';

// HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';

Następnie wolę używać ' do rozgraniczania łańcucha, więc muszę unikać mniejszej liczby znaków.

 10
Author: Juan C. Roldán,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 19:47:37

Badanie za i przeciw

Na rzecz pojedynczych cytatów

  • mniej bałaganu wizualnego.
  • generowanie HTML: atrybuty HTML są zwykle rozdzielane podwójnymi cudzysłowami.

elem.innerHTML = '<a href="' + url + '">Hello</a>';
Jednak pojedyncze cudzysłowy są tak samo legalne w HTML.

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

Ponadto, inline HTML jest zwykle anty-wzorcem. Preferuj szablony.

  • generowanie JSON: tylko podwójne cudzysłowy są dozwolone w JSON.

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

Ponownie, nie powinieneś konstruować JSON w ten sposób. JSON.stringify () jest wystarczająco często. Jeśli nie, użyj szablonów.

Za podwójnymi cudzysłowami

  • Podwójne są łatwiejsze do wykrycia, jeśli nie masz kodowania kolorów. Jak w dzienniku konsoli lub w jakiejś konfiguracji źródła widoku.
  • podobieństwo do innych języków: w programowaniu shell (Bash itp.), pojedyncze cytowane literały łańcuchowe istnieją, ale znaki specjalne nie są interpretowane wewnątrz oni. C i Java używają podwójnych cudzysłowów dla ciągów znaków i pojedynczych cudzysłowów dla znaków.
  • Jeśli chcesz, aby Kod był poprawny JSON, musisz użyć podwójnych cudzysłowów.

Na korzyść obu

Nie ma różnicy między tymi dwoma w JavaScript. Dlatego możesz użyć tego, co jest wygodne w tej chwili. Na przykład następujące literały łańcuchowe wytwarzają ten sam ciąg znaków:

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

Pojedyncze cudzysłowy dla ciągów wewnętrznych i podwójne dla zewnętrzne. Pozwala to odróżnić stałe wewnętrzne od ciągów znaków, które mają być wyświetlane użytkownikowi (lub zapisywane na dysk itp.). Oczywiście powinieneś unikać umieszczania tego drugiego w swoim kodzie, ale nie zawsze można to zrobić.

 9
Author: Divyesh Kanzariya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 14:51:54

Jeszcze jedną rzeczą, którą warto rozważyć jako przyczynę przejścia z cudzysłowów podwójnych na pojedyncze, jest wzrost popularności skryptów po stronie serwera. Podczas korzystania z PHP możesz przekazywać zmienne i analizować funkcje JavaScript za pomocą łańcuchów i zmiennych w PHP.

Jeśli napiszesz łańcuch znaków i użyjesz podwójnych cudzysłowów dla swojego PHP, nie będziesz musiał uciekać od żadnego z pojedynczych cudzysłowów, A PHP automatycznie pobierze wartość zmiennych dla Ciebie.

Przykład: muszę uruchomić Funkcja JavaScript wykorzystująca zmienną z mojego serwera.

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

To oszczędza mi wiele kłopotów w radzeniu sobie z łączeniem ciągów, i mogę skutecznie wywołać JavaScript z PHP. Jest to tylko jeden przykład, ale może to być jeden z kilku powodów, dla których programiści domyślnie stosują pojedyncze cudzysłowy w JavaScript.

Cytat z dokumentów PHP :

Najważniejszą cechą podwójnie cytowanych łańcuchów jest fakt, że nazwy zmiennych będą rozszerzane. Zobacz ciąg analizowanie szczegółów.

 8
Author: Dodzi Dzakuma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 19:20:36

Nie ma żadnej różnicy między pojedynczymi i podwójnymi cudzysłowami w JavaScript.

Specyfikacja jest ważna:

Być może występują różnice w wydajności, ale są one absolutnie minimalne i mogą się zmieniać każdego dnia w zależności od implementacji przeglądarek. Dalsza dyskusja jest daremna, chyba że Twoja aplikacja JavaScript ma setki tysięcy linii.

It ' s like a benchmark if

a=b;

Jest szybszy niż

a = b;

(dodatkowe spacje)

Dzisiaj, w konkretna przeglądarka i platforma itp.
 8
Author: 4 revs, 2 users 72%mauro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-18 10:28:29

[1]}sprawdzałem następujące około 20 razy. I wydaje się, że podwójne cytaty są o 20% szybsze.

Zabawne jest to, że jeśli zmienisz część 2 i część 1, pojedyncze cytaty są o 20% szybsze.

//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));
 7
Author: Bastiaan Linders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-21 23:11:15

Podczas używania CoffeeScript używam podwójnych cudzysłowów. Zgadzam się, że powinieneś wybrać jedno i trzymać się tego. CoffeeScript zapewnia interpolację podczas używania cudzysłowów podwójnych.

"This is my #{name}"

ECMAScript 6 używa back ticks (`) dla łańcuchów szablonów. Co prawdopodobnie ma dobry powód, ale podczas kodowania, może być kłopotliwe, aby zmienić znak ciąg znaków z cudzysłowów lub podwójnych cudzysłowów do backticks w celu uzyskania funkcji interpolacji. CoffeeScript może nie być doskonała, ale używanie wszędzie tych samych liter ciągów znaków (podwójne cudzysłowy) i zawsze możliwość interpolacji jest miłą cechą.

`This is my ${name}`
 7
Author: GijsjanB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 20:11:39

Użyłbym podwójnych cudzysłowów, gdy nie można użyć pojedynczych cudzysłowów i odwrotnie:

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

Zamiast:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
 6
Author: Gumbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-24 18:55:51

Są ludzie, którzy twierdzą, że widzą różnice w wydajności: stary wątek listy dyskusyjnej. Ale nie mogłem znaleźć żadnego z nich do potwierdzenia.

Najważniejsze jest sprawdzenie, jakiego rodzaju cudzysłowów (podwójnych lub pojedynczych) używasz w swoim łańcuchu. Pomaga to utrzymać niską liczbę ucieczek. Na przykład, gdy pracujesz z zawartością HTML wewnątrz ciągów, łatwiej jest używać pojedynczych cudzysłowów, dzięki czemu nie musisz unikać wszystkich podwójnych cudzysłowów wokół atrybutów.

 6
Author: Michiel Overeem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 17:35:01

Jeśli przeskakujesz między JavaScript i C#, najlepiej trenować palce do wspólnej konwencji, która jest podwójnymi cudzysłowami.

 5
Author: moomoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-21 06:58:28

Po przeczytaniu wszystkich odpowiedzi, które mówią, że może być szybszy lub może mieć zalety, powiedziałbym, że podwójne cudzysłowy są lepsze lub mogą być szybsze, ponieważ kompilator Google Closure konwertuje pojedyncze cudzysłowy do podwójnych cudzysłowów.

 5
Author: Mohsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-28 16:22:59

Nie ma żadnej różnicy, więc jest to głównie kwestia gustu i tego, co znajduje się w łańcuchu (lub czy sam kod JavaScript jest w łańcuchu), aby Liczba Escape ' ów była niska.

Legenda o różnicy prędkości może pochodzić ze świata PHP, gdzie oba cudzysłowy mają inne zachowanie.

 4
Author: PhiLho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 17:35:36

Teraz, gdy jest 2020, powinniśmy rozważyć trzecią opcję dla JavaScript: pojedynczy backtick dla wszystkiego.

To może być używane wszędzie zamiast pojedynczych lub podwójnych cudzysłowów.

Pozwala Ci robić wszystkie rzeczy!

  1. Umieść w nim pojedyncze cytaty: ' it ' s great!`

  2. Umieść w nim podwójne cytaty: 'to" naprawdę " świetne!`

  3. Use string interpolation: `It ' s "${better} " than świetnie!`

  4. Pozwala na wiele linii: `

    To

    Sprawia

    JavaScript

    Lepiej!

`

Nie powoduje również utraty wydajności podczas wymiany dwóch pozostałych: czy backticks (`) są wolniejsze niż inne ciągi w JavaScript?

 4
Author: OCDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 20:54:12

Jeśli twoim źródłem JavaScript jest

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

Źródłem HTML będzie:

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

Lub dla HTML5

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

JavaScript pozwala na takie tablice:

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

Ale jeśli to przeciągniesz, będzie to ze względów kompatybilności:

JSON=["this","that"]
To na pewno zajmie trochę czasu.
 3
Author: B.F.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 20:06:10

Aby dodać moje dwa centy: pracując zarówno z JavaScript i PHP kilka lat temu, przyzwyczaiłem się do używania pojedynczych cudzysłowów, więc mogę wpisać znak escape (") bez konieczności ucieczki go również. Zwykle używałem go podczas wpisywania surowych łańcuchów {[5] } ze ścieżkami plików itp.

W każdym razie moja konwencja stała się użyciem pojedynczych cudzysłowów na surowych ciągach znaków typu identyfikatora, takich jak if (typeof s == 'string') ... (w których znaki escape nigdy nie będą używane-nigdy) i podwójnych cudzysłowów dla teksty , takie jak " Hej, co tam?". Używam również pojedynczych cudzysłowów w komentarzach jako konwencji typograficznej do wyświetlania nazw identyfikatorów. Jest to po prostu zasada kciuka, a ja zrywam tylko wtedy, gdy jest to potrzebne, na przykład podczas wpisywania łańcuchów HTML '<a href="#"> like so <a>' (choć można też odwrócić cudzysłowy tutaj). Jestem również świadomy, że w przypadku JSON, podwójne cudzysłowy są używane do nazw - ale poza tym, osobiście, wolę pojedyncze cudzysłowy, gdy Escape jest Nigdy wymagane dla tekstu między cytaty-jak document.createElement('div').

Najważniejsze jest, i jak niektórzy wspominali/nawiązywali, wybrać konwencję, trzymać się jej i odbiegać tylko wtedy, gdy jest to konieczne.
 3
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-26 20:08:26