console.log("double");
vs console.log('single');
Widzę coraz więcej bibliotek JavaScript używających pojedynczych cudzysłowów podczas obsługi ciągów. Jakie są powody używania jednego nad drugim? Myślałem, że są one prawie wymienne.
javascript
string
conventions
aemkei
źródło
źródło
alert("It's \"game\" time.");
czyalert('It\'s "game" time.');
?Odpowiedzi:
Najbardziej prawdopodobnym powodem użycia pojedynczego vs podwójnego w różnych bibliotekach jest preferencja programisty i / lub spójność API. Poza konsekwentnym stosowaniem tego, który najlepiej pasuje do łańcucha.
Używając innego rodzaju cytatu jako literału:
To może się skomplikować:
Inną opcją, nową w ES6, są literały szablonów, które używają
back-tick
znaku:Literały szablonów oferują czystą składnię dla: zmiennej interpolacji, ciągów wieloliniowych i innych.
Zauważ, że JSON jest formalnie określony, aby używać podwójnych cudzysłowów, które warto rozważyć w zależności od wymagań systemowych.
źródło
alert('It’s “game” time')
vs.alert("It’s “game” time")
- nie ma znaczenia. Byś tylko trzeba uciec w (rzadkich) przypadkach, gdy pojedyncze lub podwójne prime znak'
,"
jest rzeczywiście właściwe.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. Jasne, wiele bibliotek obsługuje również pojedyncze cytaty, ale miałem jeden problem z jednym z moich projektów, zanim zdałem sobie sprawę, że pojedynczy cytat w rzeczywistości nie jest zgodny ze standardami JSON.
źródło
var jsonString = '{"key1":"value1"}';
(Nie polecam ręcznego budowania JSON.).stringify()
.Nie ma jednego lepszego rozwiązania ; chciałbym jednak argumentować, że podwójne cytaty mogą być czasem bardziej pożądane:
"
aby zidentyfikować fragment cytowanego tekstu. Gdybyśmy użyli jednego cytatu'
, czytelnik mógłby błędnie zinterpretować go jako skurcz. Drugie znaczenie fragmentu tekstu otoczonego przez'
wskazuje na znaczenie „potoczny”. Rozsądne jest zachowanie spójności z wcześniej istniejącymi językami, co może prawdopodobnie ułatwić naukę i interpretację kodu."I'm going to the mall"
, w porównaniu z wersją inaczej ucieczki:'I\'m going to the mall'
.Podwójne cudzysłowy oznaczają ciąg 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 Perl ciągi pojedynczego cudzysłowu nie oznaczają żadnych odwrotnych ukośników, a podwójne cudzysłowy je obsługują.
Notacja JSON jest napisana z podwójnymi cudzysłowami.
Niemniej jednak, jak stwierdzili inni, najważniejsze jest zachowanie spójności.
źródło
Sekcja 7.8.4 specyfikacji opisuje dosłowny zapis ciągów. Jedyną różnicą jest to, że DoubleStringCharacter to „SourceCharacter, ale nie podwójny cudzysłów”, a SingleStringCharacter to „SourceCharacter, ale nie pojedynczy cudzysłów”. Tak więc jedyną różnicę można wykazać w ten sposób:
To zależy od tego, ile wycinków chcesz uciec. Oczywiście to samo dotyczy podwójnych cudzysłowów w ciągach podwójnie cytowanych.
źródło
"{\"name\": \"Peter\"}"
vs'{"name": "Peter"}'
? Wprawdzie można powiedzieć, że jest to ta sama różnica, ale z pewnością wpłynie to na twoją decyzję w inny sposób niż w powyższym przykładzie.Pojedyncze cytaty
Chciałbym, żeby podwójne cytaty były standardem, ponieważ mają one trochę więcej sensu , ale wciąż używam pojedynczych cytatów, ponieważ dominują na scenie.
Pojedyncze cytaty:
Bez preferencji:
Podwójne cytaty:
.eslintrc
)źródło
Chciałbym powiedzieć, że różnica jest czysto stylistyczna, ale naprawdę mam wątpliwości. Rozważ następujący przykład:
W Safari, Chrome, Opera i Internet Explorer (testowane w IE7 i IE8), to zwróci:
Jednak Firefox da nieco inny wynik:
Pojedyncze cytaty zostały zastąpione podwójnymi. (Zwróć również uwagę, w jaki sposób wcięcie zostało zastąpione czterema spacjami). Sprawia to wrażenie, że co najmniej jedna przeglądarka analizuje JavaScript wewnętrznie, tak jakby wszystko zostało napisane przy użyciu podwójnych cudzysłowów. Można by pomyśleć, że Firefox zajmuje mniej czasu na przeanalizowanie JavaScript, jeśli wszystko jest już napisane zgodnie z tym „standardem”.
Co, nawiasem mówiąc, sprawia, że jestem bardzo smutną pandą, ponieważ myślę, że pojedyncze cytaty wyglądają o wiele ładniej w kodzie. Ponadto w innych językach programowania są zwykle szybsze w użyciu niż podwójne cudzysłowy, więc miałoby to sens tylko wtedy, gdyby to samo dotyczyło JavaScript.
Wniosek: Myślę, że musimy przeprowadzić więcej badań w tym zakresie.
Edycja: To może wyjaśniać wyniki testu Petera-Paula Kocha z 2003 roku.
Edycja 2014: Nowoczesne wersje Firefox / Spidermonkey już tego nie robią.
źródło
.toString
ale teraz zwraca oryginalną kopię. Współczesny Firefox nie będzie miał tego problemu.Jeśli robisz wbudowany JavaScript (prawdopodobnie „złą” rzecz, ale unikasz tej dyskusji), pojedyncze cudzysłowy są jedyną opcją dla literałów ciągowych, wierzę.
np. działa to dobrze:
Ale nie można zawrzeć „hi” w podwójnych cudzysłowach, za pomocą dowolnej metody zmiany znaczenia, o której wiem. Nawet,
"
co byłoby moim najlepszym przypuszczeniem (ponieważ unikasz cytatów w wartości atrybutu HTML), nie działa dla mnie w Firefoksie.\"
też nie będzie działać, ponieważ w tym momencie uciekasz do HTML, a nie JavaScript.Tak więc, jeśli nazwa gry to spójność i zamierzasz zrobić wbudowany JavaScript w niektórych częściach swojej aplikacji, myślę, że wygrywają pojedyncze cytaty. Ktoś proszę, popraw mnie, jeśli się mylę.
źródło
<a onclick="alert(%22hi%22);">hi</a>
- z pamięci to działa, chociaż zamiast tego może być w atrybucie href<a href="javascript:alert(%22hi%22);">hi</a>
alert("hi")
nie jest prawidłowy JavaScript. Ale wartości atrybutów są kodowane. w3.org/TR/html4/intro/sgmltut.html#didx-attribute"
to właściwy sposób na uniknięcie podwójnego cudzysłowu w atrybucie HTML. Działa dobrze w przeglądarce Firefox. @Denilson, XML (a zatem XHTML) dopuszcza zarówno pojedyncze, jak i podwójne cudzysłowy. ZobaczAttValue
literał w specyfikacji XML na w3.org/TR/REC-xml/#d0e888 .Technicznie nie ma różnicy, to tylko kwestia stylu i konwencji.
Douglas Crockford zaleca stosowanie pojedynczych cudzysłowów dla wewnętrznych ciągów i podwójnych cudzysłowów dla zewnętrznych (przez zewnętrzne rozumiemy te, które mają być wyświetlane użytkownikowi aplikacji, takie jak wiadomości lub alerty).
Ja osobiście to śledzę.
AKTUALIZACJA: Wygląda na to, że pan Crockford zmienił zdanie i teraz zaleca stosowanie podwójnych cytatów w całym :)
źródło
Ś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:
źródło
'
jest00100111
w formacie binarnym, podczas gdy"
jest00100010
w formacie binarnym. Zatem podwójne cudzysłowy zajmują o połowę mniej energii do przechowywania niż pojedyncze cudzysłowy. Na tym polega różnica.Zobaczmy, co robią referencje.
W pliku jquery.js każdy ciąg znaków jest cytowany podwójnie.
Więc od teraz będę używał ciągów cudzysłowów. (Używałem singla!)
źródło
Zachowaj spójność w tym, czego używasz. Ale nie obniżaj poziomu komfortu.
Aktualizacja ES6
Korzystanie ze składni literału szablonu .
źródło
To głównie kwestia stylu i preferencji. Istnieje kilka raczej interesujących i przydatnych technicznych eksploracji w innych odpowiedziach, więc być może jedyną rzeczą, którą mógłbym dodać, jest udzielenie drobnych światowych rad.
Jeśli jesteś kodowania w firmie lub zespole, wtedy to chyba dobry pomysł, aby postępować zgodnie z „domu styl”.
Jeśli jesteś sam hacking kilka projektów ubocznych, a następnie spojrzeć na kilka wybitnych liderów w społeczności. Powiedzmy, że wchodzisz do Node.js. Rzuć okiem na podstawowe moduły, np. Underscore.js lub express, i zobacz, jakiej konwencji używają, i rozważ przestrzeganie tego.
Jeżeli obie konwencje są jednakowo stosowane, następnie odraczać osobistych
preferencji.
Jeśli nie masz osobiste preferencje, a następnie monetą.
Jeśli nie masz monetę, następnie piwo jest na mnie;)
źródło
Mam nadzieję, że nie dodaję coś oczywistego, ale mam zmaga się z Django i Ajax i JSON w tej sprawie.
Zakładając, że w kodzie HTML używasz podwójnych cudzysłowów, jak zwykle powinno być, zdecydowanie sugeruję stosowanie pojedynczych cudzysłowów w pozostałej części w JavaScript.
Więc zgadzam się z @ady, ale z pewną ostrożnością.
Moje podstawowe zdanie: w JavaScript prawdopodobnie nie ma to znaczenia, ale jak tylko osadzisz go w HTML lub w podobny sposób zaczniesz mieć problemy. Powinieneś wiedzieć, co tak naprawdę ucieka, czyta, przekazuje ciąg.
Moja prosta sprawa to:
Możesz zobaczyć \ w trzecim polu showThis.
Podwójny cytat nie zadziałał!
Jest jasne, dlaczego, ale jest też jasne, dlaczego powinniśmy trzymać się pojedynczych cudzysłowów ... Chyba ..
Ten przypadek jest bardzo prostym osadzaniem HTML, błąd został wygenerowany przez proste kopiowanie / wklejanie z kodu JavaScript „podwójnie cytowanego”.
Aby odpowiedzieć na pytanie:
Staraj się używać pojedynczych cudzysłowów w HTML. Może zaoszczędzić kilka problemów z debugowaniem ...
źródło
Nie jestem pewien, czy jest to istotne w dzisiejszym świecie, ale w przypadku treści, które musiały być przetwarzane znaki kontrolne, i pojedynczych cudzysłowów dla łańcuchów, które nie były przetwarzane, używane były podwójne cudzysłowy.
Kompilator uruchomi operację na ciągach z podwójnym cudzysłowem, pozostawiając dosłownie nietknięty pojedynczy ciąg z cudzysłowami. To kiedyś prowadziło do tego, że „dobrzy” programiści decydowali się na stosowanie pojedynczych cudzysłowów dla ciągów, które nie zawierały znaków kontrolnych takich jak
\n
lub\0
(nieprzetworzonych w pojedynczych cudzysłowach) i podwójnych cudzysłowów, gdy potrzebowali parsowania łańcucha (przy niewielkim koszcie w cyklach procesora dla przetwarzanie ciągu).źródło
Jeśli używasz jshint , pojawi się błąd, jeśli użyjesz łańcucha podwójnego cudzysłowu.
Użyłem go przez rusztowanie Yeoman w AngularJS, ale może jest jakiś sposób na skonfigurowanie tego.
Nawiasem mówiąc, podczas obsługi HTML w JavaScript łatwiej jest używać pojedynczego cudzysłowu:
I przynajmniej JSON używa podwójnych cudzysłowów do odświeżania ciągów.
Nie ma łatwego sposobu na odpowiedź na twoje pytanie
źródło
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 ograniczania łańcucha, będziesz musiał unikać"
cudzysłowów. Bardziej prawdopodobne jest, że będziesz musiał użyć"
ciągu znaków, na przykład:Następnie wolę używać
'
do ograniczania łańcucha, więc muszę uciec od mniejszej liczby znaków.źródło
Jednym (głupim) powodem używania pojedynczych cudzysłowów jest to, że nie wymagają one naciśnięcia klawisza Shift, aby je wpisać, podczas gdy podwójny cudzysłów tak. (Zakładam, że przeciętny ciąg nie wymaga zmiany znaczenia, co jest rozsądnym założeniem.) Załóżmy, że codziennie koduję 200 wierszy kodu. Może w tych 200 wierszach mam 30 cytatów. Może wpisanie podwójnego cytatu zajmuje 0,1 sekundy więcej niż wpisanie pojedynczego cytatu (ponieważ muszę nacisnąć klawisz Shift). Potem każdego dnia tracę 3 sekundy. Jeśli koduję w ten sposób przez 200 dni w roku przez 40 lat, to zmarnowałem 6,7 godziny życia. Jedzenie do namysłu.
źródło
var description = "This is a \"quick\" test";
włączony angielska klawiatura. W przypadku angielskiej klawiatury, mały palec musi przejść z lewego klawisza Shift do klawisza Q w górnym rzędzie zamiast z klawisza A na klawisz Q. Innymi słowy, musi przemieścić się dwukrotnie Nie jestem pewien, gdzie są klawisze na niemieckiej klawiaturze, ale jestem pewien, że istnieje analogiczny przykładNa korzyść pojedynczych cytatów
Co więcej, wbudowany HTML jest zwykle anty-wzorcem. Preferuj szablony.
Ponownie nie powinieneś budować JSON w ten sposób. JSON.stringify () często wystarcza. Jeśli nie, użyj szablonów.
Na korzyść podwójnych cytatów
Na korzyść obu
Nie ma różnicy między nimi w JavaScript. Dlatego możesz korzystać z tego, co jest obecnie wygodne. Na przykład następujące literały ciągów tworzą ten sam ciąg:
Pojedyncze cudzysłowy dla ciągów wewnętrznych i podwójne dla zewnętrznych. Pozwala to odróżnić stałe wewnętrzne od ciągów, które mają być wyświetlane użytkownikowi (lub zapisywane na dysk itp.). Oczywiście powinieneś unikać umieszczania tego ostatniego w kodzie, ale nie zawsze można to zrobić.
źródło
Kolejną rzeczą, którą możesz rozważyć jako powód przejścia z podwójnych cudzysłowów na pojedyncze cudzysłowy, jest wzrost popularności skryptów po stronie serwera. Podczas korzystania z PHP można przekazywać zmienne i analizować funkcje javascript za pomocą ciągów i zmiennych w PHP.
Jeśli napiszesz ciąg znaków i użyjesz podwójnych cudzysłowów dla swojego PHP, nie będziesz musiał uciec od żadnego pojedynczego cudzysłowu, a PHP automatycznie pobierze dla ciebie wartość zmiennych.
Przykład: muszę uruchomić funkcję javascript przy użyciu zmiennej z mojego serwera.
Oszczędza mi to wielu kłopotów z radzeniem sobie z łączeniem łańcuchów i mogę skutecznie wywołać javascript z PHP. To tylko jeden przykład, ale może to być jeden z kilku powodów, dla których programiści domyślnie używają pojedynczych cudzysłowów w javascript.
Cytat z dokumentów PHP : „Najważniejszą cechą ciągów cudzysłowów jest to, że nazwy zmiennych zostaną rozwinięte. Szczegółowe informacje można znaleźć w parsowaniu ciągów”.
źródło
Są ludzie, którzy twierdzą, że widzą różnice w wydajności: stary wątek listy adresowej . 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 wewnątrz łańcucha. Pomaga utrzymać niską liczbę ucieczek. Na przykład, gdy pracujesz z HTML w swoich ciągach, łatwiej jest używać pojedynczych cudzysłowów, dzięki czemu nie musisz uciekać od wszystkich podwójnych cudzysłowów wokół atrybutów.
źródło
Używałbym podwójnych cudzysłowów, gdy pojedyncze cudzysłowy nie mogą być użyte i odwrotnie:
Zamiast:
źródło
W JavaScript nie ma różnicy między pojedynczymi i podwójnymi cudzysłowami.
Specyfikacja jest ważna:
Być może istnieją różnice w wydajności, ale są one absolutnie minimalne i mogą zmieniać się codziennie w zależności od implementacji przeglądarek. Dalsza dyskusja jest daremna, chyba że twoja aplikacja JavaScript ma setki tysięcy długości.
To jak punkt odniesienia, jeśli
jest szybszy niż
(dodatkowe spacje)
dziś w określonej przeglądarce i platformie itp.
źródło
Podczas korzystania z CoffeeScript używam podwójnych cudzysłowów. Zgadzam się, że powinieneś wybrać jedno i trzymać się tego. CoffeeScript zapewnia interpolację podczas używania podwójnych cudzysłowów.
ES6 używa tylnych znaczników (`) do ciągów szablonów. Co prawdopodobnie ma dobry powód, ale przy kodowaniu może być kłopotliwa zmiana znaku literałów łańcuchowych z cudzysłowów lub podwójnych cudzysłowów na tylne tiki, aby uzyskać funkcję interpolacji. CoffeeScript może nie być idealny, ale używanie wszędzie tego samego znaku literałów łańcuchowych (podwójne cudzysłowy) i zawsze możliwość interpolacji to miła cecha.
źródło
Jeśli przeskakujesz do tyłu między JavaScript a C #, najlepiej wytrenuj palce, aby znaleźć wspólną konwencję, która jest podwójnym cudzysłowem.
źródło
Uruchomiłem następujące około 20 razy. I wydaje się, że podwójne cudzysłowy są o około 20% szybsze.
Zabawne jest to, że jeśli zmienisz część 2 i część 1, pojedyncze cudzysłowy są o około 20% szybsze.
źródło
var dummy_date = new Date()
do początkuNie ma żadnej różnicy, więc jest to głównie kwestia gustu i tego, co znajduje się w ciągu (lub jeśli sam kod JS jest w ciągu), aby utrzymać niską liczbę ucieczek.
Legenda różnicy prędkości może pochodzić ze świata PHP, w którym oba cytaty mają różne zachowania.
źródło
Po przeczytaniu wszystkich odpowiedzi, które mówią, że może to być szybsze lub może mieć zalety, powiedziałbym, że podwójne cytowanie jest lepsze, a może także szybsze, ponieważ kompilator zamykający Google konwertuje pojedyncze cudzysłowy na podwójne.
źródło
Teraz, gdy jest rok 2020, powinniśmy rozważyć trzecią opcję dla Javascript: Pojedynczy backtick na wszystko.
Można tego używać wszędzie zamiast pojedynczych lub podwójnych cudzysłowów.
Pozwala robić wszystkie rzeczy!
Pozwala na wiele linii: `
To
Sprawia, że
JavaScript
Lepszy!
`
Nie powoduje również utraty wydajności podczas wymiany dwóch pozostałych: https://medium.com/javascript-in-plain-english/are-backticks-slower-than-other-strings-in-javascript-ce4abf9b9fa
źródło
Jeśli źródłem JS jest:
Źródłem HTML będzie:
lub dla HTML5
JS zezwala na takie tablice:
Ale jeśli go skretyzujesz, będzie to zgodne z uzasadnionym powodem:
Jestem pewien, że to zajmie trochę czasu.
źródło
Żeby dodać moje 2 centy: pracując z JS i PHP kilka lat temu, przyzwyczaiłem się do używania pojedynczych cudzysłowów, aby móc wpisać znak zmiany znaczenia ('\') bez konieczności ucieczki. Zwykle używałem go podczas pisania nieprzetworzonych ciągów ze ścieżkami plików itp. ( Http://en.wikipedia.org/wiki/String_literal#Raw_strings )
W każdym razie moja konwencja stała się użyciem pojedynczych cudzysłowów na nieprzetworzonych ciągach znaków identyfikatora, takich jak
if (typeof s == 'string') ...
(w których znaki specjalne nigdy nie byłyby używane - nigdy), i podwójnych cudzysłowów dla tekstów , takich jak „Hej, co słychać?”. Używam też pojedynczych cudzysłowów w komentarzach jako konwencji typograficznej do wyświetlania nazw identyfikatorów. Jest to tylko ogólna zasada i przerywam tylko wtedy, gdy jest to potrzebne, na przykład podczas pisania ciągów HTML'<a href="#"> like so <a>'
(chociaż tutaj można również odwrócić cytaty). Wiem także, że w przypadku JSON w nazwach używane są podwójne cudzysłowy - ale poza tym osobiście wolę pojedyncze cudzysłowy, gdy ucieczka nie jest wymagana dla tekstu między cudzysłowami - jakdocument.createElement('div')
.Podsumowując, i jak niektórzy wspominali / nawiązywali do nich, wybierz konwencję, trzymaj się jej i odchylaj tylko w razie potrzeby.
źródło