41 Soru: JavaScript'te çift veya tek tırnak ne zaman kullanılır?

tarafından oluşturulan soru Tue, Feb 9, 2016 12:00 AM

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

Dizeleri işlerken tek tırnak kullanarak orada giderek daha fazla JavaScript kütüphanesi görüyorum. Birini diğerinden kullanmanın nedenleri nelerdir? Neredeyse birbirlerinin yerine geçebileceklerini sanıyordum.

    
1846
  1. hangisini okumak daha kolay? uyarı ("oyun zamanı"); veya uyarı ('Bu oyun zamanı');
    2011-06-09 16: 10: 55Z
  2. Peki ya Ryan? alert("It's \"game\" time."); veya alert('It\'s "game" time.');?
    2011-10-11 18: 37: 01Z
  3. Tek tırnaklar her zaman kullanılırsa ve zaman zaman hazır bilginin tek alıntı içerdiği çift tırnaklar varsa, o zaman çok daha az kaydırma düğmeleri yazmamız gerekir ve sol küçük parmağımız bize kutsamaları verir . Fakat evet, @arne'ın dediği gibi, JSON için çift alıntı kullanılmalıdır.
    2011-10-31 15: 46: 42Z
  4. Avrupa klavyesindeyken tekli alıntı yapmak daha kolaydır (çift tırnak, Shift + 2'dir; sağ pinky).
    2012-04-25 20: 46: 59Z
  5. @ Arne "Avrupa klavyesi" diye bir şey yoktur. Örneğin. Almanca klavye her iki teklif türü için de değişiklik gerektirir. (Ancak tek tırnak daha kolaydır.)
    2012-06-18 15: 53: 19Z
30 Yanıtlar                              30                         

Farklı kütüphanelerde single vs double kullanmanın en olası nedeni programcı tercihi ve /veya API tutarlılığıdır.

Tutarlı olmak dışında, dizgeye en çok hangisini kullanın :.

Diğer teklif türünü değişmez olarak kullanmak:

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

… ancak bu karmaşıklaşabilir…

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

ES6’daki yeni seçeneklerden biri Şablon hazırlıkları back-tick karakterini kullanan:

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

Şablon değişmezleri aşağıdakiler için temiz bir sözdizimi sunar: değişken enterpolasyonu, çok satırlı dizeler ve diğerleri.

    
1148
2019-03-26 22: 14: 26Z
  1. Tüm kod kurallarına dikkat etmek için önemli bir nokta - Bir kez tanımlayın ve ona bağlı kalın. IOW, bir yerde çift tırnak işareti, başka bir yerde tek tırnak işareti kullanmayın.
    2009-05-02 08: 03: 53Z
  2. @ Cerebrus - Esnekliğin bu konuda uygun olduğunu düşünüyorum. Elbette tercih edilen bir stil seçin, ancak bir dizgede kaçan tırnaklardan tasarruf etmek için stilden ayrılmanız gerekiyorsa. Bununla iyi olurum.
    2009-05-02 08: 11: 03Z
  3. @ Mathias Bynens: Bir şeyin varlığını kanıtlayamazsınız. Her ikisine de bir avantaj olduğunu kanıtlayın, işte böyle. ;)
    2010-01-11 23: 16: 20Z
  4. jsfiddle.net/5HhWF/1 Hız konusunda hiçbir fark görmüyorum (krom)
    2010-12-27 00: 26: 54Z
  5. @ Pascal Şaka yaptığını düşünüyorum. Ve eğlenceliydi.
    2012-04-12 19: 47: 15Z

JSON ile ilgileniyorsanız, kesinlikle konuşulduğu gibi, JSON dizelerinin çift alıntı yapılması gerektiği belirtilmelidir. Tabii ki, birçok kütüphane tek tırnakları da destekliyor, ancak tek bir tırnak dizisinin aslında JSON standartlarına göre olmadığını fark etmeden önce projelerimden birinde büyük problemlerim vardı.

    
596
2011-01-06 07: 59: 46Z
  1. jQuery.ajax ile bir ASP.NET hizmetine (Web Hizmeti, Sayfa Yöntemi veya MVC) çağrı yaparken bu çok önemlidir.
    2011-03-03 11: 46: 19Z
  2. JSON dizgileri içindeki özellik adları çift alıntı olmalıdır, ancak bir bütün olarak bir JSON dizgisi tek alıntı yapılabilir: var jsonString = '{"key1":"value1"}'; ( JSON'u manuel olarak oluşturmanızı tavsiye etmiyorum.)
    2012-02-09 10: 45: 04Z
  3. Eğer .stringify() bu.
    2013-02-03 02: 09: 14Z
  4. Bu tam burada çift tırnak işareti kullanmak için en iyi argümandır. JSON, çift tırnak içermelidir. Diğer cevaplar çoğunlukla “tutarlı olma” tavsiyesini veriyor, bu da dilin herhangi bir kısmının gerçekçi bir şekilde ikili teklifi zorlayabileceği anlamına gelirse, bu ikili teklifi sürekli kullanmanız gerekir.
    2014-07-14 16: 07: 14Z
  5. Bu, neredeyse tüm diğer dillerin (Java, C, C ++, ...) karakter dizileri için çift tırnak kullandığı ve karakter karakterleri için tek tırnak işaretleri kullandığı birden fazla dille çalışırken de geçerlidir. . Ben aynı alıntıyı tahta boyunca kullanmayı tercih ediyorum ve bu yüzden JS için çift tırnakla yapıştırıyorum. Yıllar süren dokunma ile, çift tırnaklar için kaydırmak için fazladan bir tuşa basmak tamamen anlamsızdır ve kodlamanız yazı yazmanızla sınırlandırılmışsa, o zaman doğru şekilde yazmanız gerekir.
    2014-09-24 17: 17: 49Z

Daha iyi bir çözüm yok ; ancak, çift tırnakların zaman zaman daha arzu edilebilir olabileceğini savunmak isterim:

  • Yeni gelenler, dillerinden gelen çift alıntılara zaten aşina olacaklardır . İngilizce'de, alıntı bir metnin geçişini tanımlamak için çift tırnak işareti " kullanmalıyız. ' numaralı tek bir teklifi kullanırsak, okuyucu bunu bir daralma olarak yanlış yorumlayabilir. ' ile çevrili bir metnin geçişinin diğer anlamı 'konuşmacı' anlamını gösterir. Önceden var olan dillerle tutarlı kalmak mantıklıdır ve bu muhtemelen kodun öğrenilmesini ve yorumlanmasını kolaylaştırabilir.
  • İkili tırnak, kesme işaretleri'nden kaçma gereksinimini ortadan kaldırır (kasılmalarda olduğu gibi). Dizeyi düşünün: "I'm going to the mall", aksi durumda kaçan sürüm: 'I\'m going to the mall'.
  • İkili tırnak, diğer birçok dilde bir dize anlamına gelir . Java veya C gibi yeni bir dil öğrendiğinizde, çift tırnak her zaman kullanılır. Ruby, PHP ve Perl'de, tek tırnaklı dizeler ters eğik çizgi çıkışları anlamına gelmezken, çift tırnak bunları destekler.

  • JSON notasyonu çift tırnak ile yazılmıştır.

Bununla birlikte, başkalarının da belirttiği gibi, tutarlı kalması çok önemlidir.

    
306
2018-03-12 12: 13: 22Z
  1. İngilizce dilindeki ilk noktanız her zaman doğru değildir ve bulunduğunuz yere /evin konvansiyonuna bağlı olarak değişebilir. Basılı materyaller tipik olarak konuşma için tek tırnak işaretleri kullanır ve alıntılanan metnin büyük blokları için başka biçimler kullanır. 'Konuşma dili' anlamınız, vurgu için alıntıların yararlı bir tanımı değildir. Ayrıca İngilizce kullanıcıları genel olaraktırnak işaretleri ve kesme işaretleri ile çok zayıf.
    2015-01-22 13: 24: 41Z
  2. @ JohnFerguson, bu nedenle, yalnızca bu nedenle, bu farklılaşmayı (kesme işareti ve alıntılananlar arasında) yapmak için çift tırnak kullanılması istenebilir.
    2015-01-22 17: 24: 30Z
  3. Daha önce tek tırnakları tercih ediyorum ve bu beni bir sonraki projem için çift tırnak kullanmaya ikna etmiş olabilir ... Teşekkürler
    2015-02-23 07: 45: 11Z
  4. Tamamen pragmatizm hakkındayım. Yazdığım veya kullandığım 100 dizeden 1'inde çift tırnak olduğu ve çoğunda birçok kesme işareti olduğu için, çiftler kullanıyorum. Ancak günün sonunda, proje için yeni bir geliştiriciyseniz, 1) projede halihazırda kullanımda olan alıntı türünü veya 2) daha mantıklı olduğunu düşündüğünüzü kullanmalısınız. div>
    2015-11-16 17: 43: 16Z
  5. Noktadaki durum-- az önce yazdıklarım (birden fazla kesme işareti var, çift tırnak yok;)
    2015-11-16 17: 44: 15Z

Yalnızca farkı, aşağıda gösterilmiştir:

 
'A string that\'s single quoted'

"A string that's double quoted"

Yani, yalnızca yapmak istediğiniz kaçış teklifine bağlı. Açıkçası aynı şey, çift tırnaklı dizelerdeki çift tırnak için de geçerlidir.

    
116
2015-06-10 08: 08: 24Z
  1. Bunun tek fark olduğundan nasıl emin olabilirsiniz?
    2009-05-02 07: 49: 44Z
  2. Gareth, iyi bir noktaya değindi. Bunu düşünmedim
    2009-05-02 07: 55: 59Z
  3. @ Mathias - şartnamenin 7.8.4 bölümü [ ecma-international.org/publications/standards/Ecma-262.htm] değişmez dize gösterimini açıklar, tek fark, DoubleStringCharacter'ın" SourceCharacter olmasıdır, ancak çift değildir - alıntı "ve SingleStringCharacter" SourceCharacter ancak tek alıntı değil "
    2009-05-02 10: 14: 31Z
  4. @ Mathias - Tamam, amacınızı anlıyorum ve JavaScript programlarının bunun ölçülebilir bir fark yarattığı noktaya (ve hatta daha sonra bile) göre optimize edildiğini düşünmeyi çok isterim , bu, belirli bir tercümanın kaprislerine kaldı), bu konuda biraz sinirliyim.
    2009-05-03 10: 22: 38Z
  5. "{\"name\": \"Peter\"}"'a karşı '{"name": "Peter"}''a ne dersiniz? Kuşkusuz, bunun aynı fark olduğunu söyleyebilirsiniz, ancak kararınızı kesinlikle yukarıdaki örnekten farklı bir şekilde etkileyecektir.
    2015-06-16 20: 55: 58Z

Tek Tırnaklar

Keşke çift tırnak işareti standartsa, çünkü biraz daha anlamlı olun , ancak sahneye hakim oldukları için tek tırnak kullanmaya devam ediyorum.

Tek tırnak:

Tercih yok:

İkili tırnak:

83
2017-05-23 10: 31: 39Z
  1. Crockford şimdi çift tırnak işareti tercih ediyor.
    2016-09-29 05: 16: 23Z
  2. google şimdi çift tırnak işaretlerini tercih ediyor
    2017-01-12 18: 19: 50Z
  3. airbnb şimdi çift tırnak işaretlerini tercih ediyor
    2017-01-12 18: 21: 06Z
  4. @ SurajJain Kaynak? Airbnb ve Google stil kılavuzları hala tercih edilenleri listeledi.
    2017-01-12 20: 37: 18Z
  5. @ SurajJain Ah, bunlar JSON'da yazılmış ve tek tek alıntılara hiç izin vermeyen kod stili denetleyici yapılandırmalarıdır. Bunları okumak, farklı projeler tarafından yapılan seçimleri karşılaştırmanın iyi bir yoludur.
    2017-01-13 09: 38: 52Z

Aradaki farkın tamamen stilize olduğunu söylemek isterim, ancak gerçekten şüphelerim var. Aşağıdaki örneği düşünün:

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

Safari, Chrome, Opera ve Internet Explorer’da (IE7 ve IE8’de test edilmiştir), bu aşağıdakileri döndürür:

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

Ancak, Firefox biraz farklı bir sonuç verecektir:

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

Tek tırnaklar çift tırnak işaretleri ile değiştirildi. (Ayrıca girintili boşluğun nasıl dört boşlukla değiştirildiğine dikkat edin.) Bu, en az bir tarayıcının JavaScript'i dahili olarak her şeyi çift tırnak işareti ile yazılmış gibi ayrıştırdığı izlenimini verir. Her şey bu "standarda" göre yazılmışsa, JavaScript'in ayrıştırılması Firefox’un daha az zaman alacağını düşünebilir.

Bu arada, bu beni çok üzücü bir panda yapıyor, çünkü tekli tırnakların kodda daha hoş göründüğünü düşünüyorum. Ayrıca, diğer programlama dillerinde, genellikle çift tırnak işaretinden daha hızlı kullanılırlar, bu nedenle yalnızca aynı JavaScript için geçerliyse anlamlı olur.

Sonuç: Bu konuda daha fazla araştırma yapmamız gerektiğini düşünüyorum.

Düzenle: Bu, Peter- Paul Koch'un test sonuçları 2003’ten itibaren yayınlandı.

  

Görünen o ki, tek tırnaklar bazen Explorer Windows’ta daha hızlı (testlerimin yaklaşık 1 /3'ü daha hızlı tepki süresi gösteriyor), ancak Mozilla hiç bir fark göstermiyorsa,çift ​​tırnakları biraz daha hızlı tutar. Opera'da hiç bir fark bulamadım.

Düzenleme 2014: Firefox /Spidermonkey’in modern sürümleri artık bunu yapmıyor.

    
56
2014-01-14 20: 29: 39Z
  1. Bir tarayıcıda bir şekilde biraz daha hızlı ve diğerinde biraz daha hızlı bir şekilde bunu yapmak daha hızlıysa, elinden alabileceğimiz tek rehber gibi görünüyor Bu, daha fazla ne istersek yapmalıyız çünkü bazı kullanıcılara zarar verecek ve başkalarına yardım edecek ve fark miktarının farkedilemez olması muhtemeldir. "Erken optimizasyon ..." ve hepsi.
    2009-05-03 06: 26: 24Z
  2. Üzgünüm yorumum daha yapıcı değildi. Sadece tarayıcının iç sözdizimini temsil etmesini nasıl seçtiğini söylüyorum, muhtemelen nasıl ayrıştırılacağıyla çok az ilgisi vardır ve bu nedenle muhtemelen bir alıntıyı diğerine tercih etmenin bir nedeni değildir. Diğer taraftan, tarayıcılardaki tek ve çift tırnaklar için ayrıştırma zamanlarını karşılaştıran performans verileri ise daha çekici olurdu.
    2012-01-14 05: 44: 09Z
  3. Bu müthiş bir cevap, geri kalanı sadece cıvıldayan 'onlar aynı' onlar 'aynı' ... > "Ayrıca, diğer programlama dillerinde, genellikle çift tırnak işaretinden daha hızlı kullanılırlar" , Hangi dilleri sorabilirim? Java ve C # gibi normal diller kullandım, JS'den başka bir tanesini daha önce tek tırnak işareti olarak kabul etmedim. Tek tırnaklı alıntı kutuları genellikle yalnızca karakter sabitleri için kullanılır (yalnızca bir karaktere izin verilir).
    2012-11-27 07: 03: 17Z
  4. AFAIK bu Firefox 17’de giderilmişti, Firefox .toString yaparken ayrıştırma yapmak için kullanılır, ancak şimdi orijinal kopyasını döndürür. Modern firefox'ta bu sorun olmayacak.
    2014-03-13 10: 14: 18Z
  5. Hız farkları hakkında hiçbir şey bilmiyor. Ancak, "Bu, en az bir tarayıcının, her şeyi çift tırnak işareti kullanılarak yazılmış gibi, JavaScript'i dahili olarak ayrıştırdığı izlenimini verir." saçmalık. Çift tırnak ile yazılmış gibi çözülmedi. Bu, kendi iç sunumunu (sadece tırnakları değil tırnakları saklayan) bir tırnak seti kullandığı insan tarafından okunabilir bir versiyonuna çevirdi. Her neyse, bu Benjamin’in yorumuna göre değişmiş görünüyor.
    2014-10-11 08: 00: 13Z

Satır içi JavaScript kullanıyorsanız (tartışmalı olarak "kötü" bir şey, ancak bu tartışmadan kaçınıyorsunuz) tek tırnaklar, dize değişmezleri için tek seçeneğinizdir, inanıyorum.

örneğin, bu işe yarar:

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

Ama "merhaba" yı, farkında olduğum herhangi bir kaçış yöntemiyle çift tırnak içine alamazsınız. En iyi tahminim olacak olan &quot; bile (HTML niteliğinde bir alıntıdan kaçtığınızdan beri) Firefox’ta işe yaramıyor. \" da çalışmayacak çünkü bu noktada JavaScript için HTML'den kaçıyorsunuz.

Öyleyse, oyunun adı tutarlı ise ve uygulamanızın bazı bölümlerinde bazı satır içi JavaScript’ler yapacaksanız, bence tek alıntılar kazanır. Birisi lütfen yanlış olsa beni düzeltin.

    
31
2011-09-28 02: 41: 52Z
  1. Muhtemelen kötü bir şey olduğu konusunda anlaştım, ancak yapılması gerekiyorsa, URL tarzı kodlamanın kullanılabildiğinden eminim, örneğin <a onclick="alert(%22hi%22);">hi</a> - bellekten bu işe yarar, bunun yerine href özelliğinde olmuş olabilir, ancak <a href="javascript:alert(%22hi%22);">hi</a>
    2009-12-16 10: 33: 08Z
  2. <a onclick='alert("hi");'>hi</a> da yasaldır ...
    2011-05-13 12: 19: 56Z
  3. <a onclick="alert(&quot;hi&quot;)"> benim için çalışıyor ..
    2011-07-03 23: 06: 50Z
  4. @ Tom Lianza, kesinlikle alert(&quot;hi&quot;) geçerli bir JavaScript değil. Ancak niteliklerin değerleri kodlanmıştır. w3.org/TR/html4/intro/sgmltut.html# didx-nitelik
    2011-07-22 19: 33: 40Z
  5. Burada @Robert ile anlaştı. &quot;, bir HTML niteliğinin içinde çifte alıntı yapmaktan kaçınmanın doğru yoludur. Firefox'ta iyi çalışıyor. @Denilson, XML (ve dolayısıyla XHTML) hem tekli hem de çiftli tırnaklara izin verir. w3.org/TR/REC-xml/adresindeki XML özelliğinde AttValue değişmezine bakın # d0e888 .
    2012-01-10 13: 06: 11Z

Teknik olarak hiçbir fark yoktur, sadece stil ve kongre meselesidir.

Douglas Crockford, dahili dizeler için tek tırnaklar ve harici için çift tırnaklar kullanılmasını önerir (harici olarak, mesajlar veya uyarılar gibi, uygulama kullanıcısına gösterilecekleri kastediyoruz).

Bunu şahsen takip ediyorum.

GÜNCELLEME: Bay Crockford'un fikrini değiştirdiği ve şimdi boyunca çift tırnak işareti kullanılmasını önerir :)

    
29
2016-08-31 13: 17: 43Z
  1. Douglas Crockford ve JQuery. Zehirini al.
    2012-09-28 01: 33: 24Z
  2. Crockford'un bunun nedeni nedir?
    2015-08-02 13: 09: 37Z
  3. Bu benim takip ettiğim kongre. Daha kişisel bir tercih. JQuery seçicileri ve /veya getElementById ('id'); gibi içsel şeyler için tek alıntı dizeleri kullanmayı seviyorum; tıpkı tek tırnak işaretleriyle görünmesini seviyorum. Ancak, genellikle metinde dahili tırnak içerebileceğinden, harici metin için çift tırnak içine geçin. Ayrıca, birinde veya diğerinde bir hata bulmaya çalışıyorsanız, harici dizgeler ile iç dizeler arasında fark etmeyi ve ayırt etmeyi kolaylaştırır.
    2015-08-27 13: 19: 34Z
  4. 2016-08-30 20: 27: 43Z

Açıkça konuşursak, anlam olarak hiçbir fark yoktur; bu yüzden seçim uygunluğa iniyor.

Tercihinizi etkileyebilecek birkaç faktör var:

  • Ev tarzı: Bazı geliştirici grupları zaten bir kongre veya diğerini kullanıyor.
  • İstemci tarafı gereksinimleri: Dizelerde tırnak mı kullanıyorsunuz? (Bkz. Ady'nin cevabı).
  • Sunucu tarafı dili: VB.Net çalışanları java betiği için tek tırnak işareti kullanmayı seçebilir, böylece komut dosyaları sunucu tarafı oluşturulabilir (VB.Net dizeleri için çift tırnak kullanır, böylece java betiği dizeleri tek tırnak kullanıyorlarsa ayırt etmesi kolaydır).
  • Kütüphane kodu: Belirli bir stil kullanan bir kütüphane kullanıyorsanız, aynı stili kendiniz kullanmayı düşünebilirsiniz.
  • Kişisel tercih: Bir veya diğer stilin daha iyi göründüğü bir şey olabilir.
25
2008-10-28 15: 15: 07Z
  1. Doğru değil, ' ikili olarak 00100111 iken " ikili olarak 00100010'dur. Bu nedenle, çift tırnak, tek tırnak olarak depolanmanın yarısı kadar güç harcar. İşte buradaki fark bu.
    2017-05-22 21: 59: 32Z

Bir referansın ne yaptığına bakalım.

Jquery.js içinde her dize çift tırnak içine alınır.

Yani şimdi başladığımda, çift tırnaklı dizeler kullanacağım. (Tek kullanıyordum!)

    
17
2012-07-24 15: 16: 11Z
  1. Bu neden oy kullandı? Bu bir stil meselesidir ve en iyi stil tutarlı olmak ve sizden önce gelenleri takip etmektir.
    2012-09-28 01: 32: 58Z
  2. + 1 jQuery API belgeleri de var . Bu, çift tırnak için belirlediğim tek nedendi. Şahsen, "kişisel tercihe bağlı olarak gelir" cevaplarının biraz kusurlu olduğunu düşünüyorum - en çok kullanılan bir kongre bulmak ve buna bağlı kalmak için en iyisidir. Ayrıca, örnekleri doğrudan ve dolaylı olarak jQuery'den kopyalayıp yapıştırmak isteyebileceğim için, alıntıları her zaman değiştirmek zorunda kalmak istemiyorum.
    2014-02-14 11: 53: 01Z
  3. Belki de jQuery önlerinde bulunan insanları takip edemedi (ya da çoğu diğer uzmanlar gibi gerçekten umursamadı). ;)
    2014-06-10 21: 18: 16Z
  4. But Angular .... (sadece şaka: P)
    2014-10-17 13: 38: 47Z
  5. lol, eğer ciddi değilse dava açmaz
    2016-10-10 06: 55: 04Z

Bu çoğunlukla bir stil ve tercih meselesidir. Diğer cevaplarda bazı ilginç ve yararlı teknik araştırmalar var, bu yüzden belki de ekleyebileceğim tek şey dünyaya küçük bir tavsiye vermek.

  • Bir şirkette veya takımda kodluyorsanız , o zaman muhtemelen iyi bir fikirdir. "ev stili" ni izleyin.

  • Yalnızca birkaç yan projeyi hapsederseniz , o zaman toplulukta öne çıkan birkaç lidere bakın. Örneğin, Node.js.'ye girdiğinizi varsayalım. Temel modüllere bir göz atın, örneğin underscore.js veya ifade edip ne olduğunu görün kullandıkları sözleşmeleri takip etmeyi düşünün.

  • Her iki sözleşme de aynı şekilde kullanılırsa, o zaman kişisel bilgilerinizi erteleyebilir
    tercihi.

  • Kişisel tercihiniz yoksa, o zaman yazı tura atın.

  • Madalyonun yoksa, o zaman bira benim üzerimde;)

14
2013-04-01 22: 17: 58Z

Umarım açık bir şey eklemiyorum, ancak Django mücadele ediyorum a> ve Ajax ve bu konuda JSON.

HTML kodunuzda, normalde olması gerektiği gibi çift tırnak kullandığınızı varsayarsak, JavaScript'te geri kalanı için tek tırnak kullanmanızı şiddetle tavsiye ederim.

Yani @ady ile ancak biraz özenle aynı fikirdeyim.

Son satırım: JavaScript’te muhtemelen önemi yoktur, ancak gömdüğünüz andan itibaren HTML içinde veya sizin sorunlarınız olmaya başlar gibi. Bilmen gerekir gerçekte kaçan, okuduğunuz ve dizginizi geçenler.

Benim basit davam şuydu:

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

\'yi showThis'in üçüncü alanında görebilirsiniz.

İkili teklif işe yaramadı!

Neden olduğu açık ancak neden olduğumuz açıktek tırnak üzerinde durmak ... .. Sanırım ..

Bu vaka çok basit bir HTML katıştırmasıdır, hata üretilmiştir. 'çift tırnaklı' bir JavaScript kodundan basit bir kopyala /yapıştır ile.

Yani soruyu cevaplamak için:

HTML içindeyken tek tırnak kullanmaya çalışın. Birkaç hata ayıklama sorununu kurtarabilir ...

    
13
2015-11-22 03: 04: 47Z
  1. ES6 string interpolation (backticks) ile benzer bir sorunla karşılaştım. Yapım sistemim onu ​​çift tırnaklı bir dizgede derledi, bu da tek tırnak işareti ile çalışan bir Auth başlığını kırdı!
    2016-02-12 03: 07: 28Z

Kullandığınız şeyde tutarlılığı koruyun. Ancak konfor seviyenizi düşürmeyin.

 
"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

ES6 güncellemesi

Şablon hazır bilgi sözdizimini kullanma .

 
`Be "my" guest. You're in complete freedom.`; // most comfort :D
    
13
2017-01-05 05: 56: 07Z

Bunun günümüz dünyası için geçerli olup olmadığından emin değilsiniz, ancak kontrol karakterlerinin işlenmesi için gereken içerik için kullanılan çift tırnak işaretleri ve kullanılmayan dizeler için tek tırnaklar.

Derleyici, kelimenin tam anlamıyla dokunulmamış tek bir alıntı dizeyi bırakırken, çift tırnaklı bir dizge üzerinde string manipülasyonunu çalıştıracaktır. Bu, 'iyi' geliştiricilere, \n veya \0 gibi kontrol karakterleri içermeyen (tek tırnaklar içinde işlenmeyen) dizeler için tek tırnaklar ve ayrıştırılmış dizeye ihtiyaç duyduklarında çift tırnaklar (cpu cinsinden küçük bir maliyetle) kullanmayı seçmelerine yol açtı. dizgiyi işlemek için kullanılan çevrimler).

    
12
2013-06-08 03: 54: 32Z
  1. İşlerin bir şekilde yapılması gerekmez ve şimdi başka bir şey yapılır. Farklı diller tırnaklardan farklı olarak işlenir ve bazıları açıkladığınız gibi çalışır. Ancak bu bir JavaScript sorusudur. Tekli ve çiftli tırnak işaretleri JavaScript'te aynı şekilde ele alınır (diğer teklif türünün kaçmadan bir dizgede kullanılmasına izin verilmesi hariç). Kontrol karakterlerine veya string enterpolasyonuna izin veren çift tırnak işareti yoktur. JavaScript böyle çalışmıyor. Kontrol karakterleri ve kaçış dizileri, kullandığınız alıntı türüyle aynı şekilde çalışır.
    2014-03-15 23: 58: 28Z
  2. Eski bir Perl programcısı olarak, JS ile alakasız olduğunu bilmeme rağmen sürekli olarak düşündüğüm şey bu.
    2014-12-31 16: 23: 58Z

jshint kullanıyorsanız, çift alıntı dizesi kullanırsanız bir hataya neden olur.

AngularJS’in Yeoman iskelesi üzerinden kullandım, ancak belki de bir şekilde bunu yapılandırmak için bir yönetici var.

Bu arada, HTML’yi JavaScript’le işlediğinizde, tek bir alıntı kullanmak daha kolaydır:

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

Ve en azından JSON, dizeleri tevbe etmek için çift tırnak kullanıyor.

Sorunuza cevap vermenin önemsiz bir yolu yoktur

    
12
2014-02-27 15: 26: 24Z
  1. jshint'i ikisini de kabul edecek şekilde yapılandırabilirsiniz.
    2014-05-23 22: 16: 27Z
  2. Uygulama jshint değişti mi? demo web sitesi herhangi bir uyarı /hata yapmadan kabul ediyor gibi göründüğü için, ya jshint'i kullanmak için sınırlama seçenekleri bulamıyorum. Belki de bu cevap modası geçmiş ya da yanlış mı?
    2015-11-13 09: 44: 49Z

Performanstan bahsetmek, alıntılar hiçbir zaman sizin darboğazınız olmayacak, ancak performans her iki durumda da aynı.

Kodlama hızından bahsedersek, bir dizgiyi sınırlamak için ' kullanıyorsanız, " alıntıdan kaçmanız gerekecektir. Dizenin içinde " kullanmanız daha olasıdır, örneğin:

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

Sonra, dizgiyi sınırlamak için ''u kullanmayı tercih ediyorum, bu yüzden daha az karakterden kaçmak zorundayım.

    
10
2013-11-19 15: 20: 05Z

Tek tırnak kullanmanın (saçma) bir nedeni, bunları yazmak için üst karakter tuşunu basmanızı istememeleriydi, oysa çift alıntı yapar. (Ortalama bir dizgenin kaçmayı gerektirmediğini farz ediyorum, ki bu makul bir varsayımdır.) Şimdi her gün 200 satır kod yazdığımı varsayalım. Belki de 200 satırda 30 teklifim var. Belki bir çift alıntı yazmak, tek bir alıntı yazmaktan 0.1 saniye daha fazla zaman alır (çünkü üst karakter tuşuna basmam gerekiyor). Sonra herhangi bir günde 3 saniye harcıyorum. 40 yıl boyunca yılda 200 gün bu şekilde kodlarsam, hayatımın 6,7 saatini boşa harcadım. Düşünce için yiyecek.

    
9
2013-11-22 03: 59: 33Z
  1. Sanırım burada sadece İngilizce klavye düzenini kastediyorsunuz ... Almanca bir tane var, ikisine de vardiya yapmam gerekiyor. Her neyse, neden shift tuşuna basmanın işleme zaman kazandırdığını anlamıyorum. Sol elle vardiyaya bastım ve sağ taraftaki teklif tuşuna basın. Aynı zamanda olur, benim için hiçbir fark yoktur.
    2015-10-16 09: 23: 27Z
  2. @ codewandler "tuşa paralel olarak bassanız bile" shift tuşuna basmak zorunda olmanın bir bedeli vardır. Örneğin, İngilizce bir klavyede var description = "This is a \"quick\" test"; yazdığınızı varsayalım: İngilizce bir klavyede, pembemsi parmağınız, sol kaydırma tuşundan A satırına gitmek yerine üst satırdaki Q tuşuna kadar hareket etmelidir. Başka bir deyişle, iki kat mesafeye gitmesi gerekir. Tuşların Almanca klavyede nerede olduğundan emin değilim, ancak benzer bir örnek olduğundan eminim.
    2015-10-16 16: 55: 46Z
  3. @ codewandler Ayrıca, paralel olarak yapabilirsem bile shift yazmam gerekir, sol pinky parmağının sonradan sonraki karakteri yazmaya hazırlanmasına izin vermez " ne yazıyorsanız yazın.
    2015-10-16 16: 58: 26Z
  4. "Zaman kaybı" fikri biraz saçma, ama daha az ergonomik gerilme (özellikle karpel tüneli sendromu çağında) fikri hoş bir hale getiriyor Özellikle önemli olmadığı durumlarda kazancınızı artırın. Günde 1.000'den fazla kod satırı verildiğinde, bu yüzlerce günlük pinky virajını kurtarabilir.
    2018-06-13 18: 24: 48Z
  

Artıları ve eksileri inceleme

Tek tırnakların lehine

  • Daha az görsel karmaşa.
  • HTML Oluşturma: HTML öznitelikleri genellikle çift tırnak işareti ile ayrılır.

 
elem.innerHTML = '<a href="' + url + '">Hello</a>';
Bununla birlikte, tek tırnaklar HTML'deki kadar yasal.

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

Ayrıca, satır içi HTML normalde bir anti-kalıptır. Şablonları tercih et.

  • JSON Oluşturma: JSON'da yalnızca çift alıntıya izin verilir.

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

Yine, JSON'u bu şekilde yapmak zorunda değilsiniz. JSON.stringify () genellikle yeterlidir. Değilse, şablonları kullanın.

İkili tırnak lehine

  • Renk kodlamanız yoksa çiftler daha kolay anlaşılır. Konsol günlüğündeki veya bir tür görünüm kaynağı kurulumundaki gibi.
  • Diğer dillere benzerlik: Kabuk programlamada (Bash vb.), tek tırnaklı string değişmezleri vardır, ancak kaçışlar içlerinde yorumlanmaz. C ve Java, dizeler için çift tırnak işareti ve karakterler için tek tırnak işareti kullanır.
  • Kodun JSON'un geçerli olmasını istiyorsanız, çift tırnak kullanmanız gerekir.

Her ikisinin de lehine

JavaScript’te ikisi arasında bir fark yoktur. Bu nedenle, şu anda uygun olanı kullanabilirsiniz. Örneğin, aşağıdaki hazır bilgi dizgelerinin tümü aynı dizgeyi üretir:

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

Dahili dizeler için tek tırnaklar ve harici için çift tırnaklar. Bu, dahili sabitleri kullanıcıya gösterilecek olan dizelerden (veya diske yazılan vb.) Ayırt etmenizi sağlar. Açıkçası, ikincisini kodunuza koymaktan kaçınmanız gerekir, ancak bu her zaman yapılamaz.

    
9
2016-03-08 14: 51: 54Z

İkili tırnaklardan tekli tırnaklara geçişin bir nedeni olarak düşünmek isteyebileceğiniz bir şey daha, sunucu tarafı komut dosyalarının popülaritesinin artmasıdır. PHP kullanırken değişkenleri iletebilir ve PHP'de dizeleri ve değişkenleri kullanarak javascript işlevlerini ayrıştırabilirsiniz.

Bir dize yazarsanız ve PHP'niz için çift tırnak işareti kullanırsanız, tek tırnak işaretlerinden hiçbirinden kaçmak zorunda kalmazsınız ve PHP sizin için değişkenlerin değerini otomatik olarak alır.

Örnek: Sunucumdaki bir değişkeni kullanarak bir javascript işlevi çalıştırmam gerekiyor.

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

Bu, dizgilere katılmakla uğraşmam konusunda bana büyük bir güçlük kazandırıyor ve PHP'den etkin bir şekilde javascript çağırabilirim. Bu sadece bir örnektir, ancak programlayıcıların javascript'te tekli tırnaklara geçme nedenlerinin birkaç nedeni olabilir.

PHP belgelerinden alıntı yapın : "Çift tırnaklı dizelerin en önemli özelliği değişken isimlerinin genişletilmesidir. Ayrıntılar için dize ayrıştırmaya bakın."

    
8
2012-04-12 01: 20: 53Z
  1. + 1, bunu MVC.Net projemde yapıyorum, böylece C # 'dan çift tırnak işareti, javascript' den tek tırnak işareti ile karışmaz ve tam tersi .
    2015-03-12 01: 31: 33Z
  2. Bir PHP sınıfı yönteminden sayfanıza JavaScript yazıyorsanız, daha büyük sorunlarınız olduğunu düşünüyorum.
    2015-08-02 13: 08: 39Z

Tek tırnaklar kullanılamadığında çift tırnak işareti kullanırdım ve bunun tersi:

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

Bunun yerine:

 
'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
    
6
2009-07-24 18: 55: 51Z
  1. O'rea gibi hem tek tırnak hem de çift tırnak içeren bir dize ne olacak? lly
    2013-06-27 07: 21: 39Z

JavaScript’te tek ve çift tırnak arasında bir fark yoktur.

Spesifikasyon önemlidir:

Belki performans farkları vardır, ancak bunlar kesinlikle minimumdur ve tarayıcıların uygulamasına göre her gün değişebilir. JavaScript uygulamanız yüz binlerce uzun olmadıkça daha fazla tartışma yapılabilir.

Eğer öyleyse bir kriter gibi

 
a=b;

şundan daha hızlıdır:

 
a = b;

(fazladan boşluklar)

bugün, belirli bir tarayıcıda ve platformda vb.

    
6
2015-11-21 23: 10: 20Z
  1. boşluksuz daha hızlı. dize ayrıştırmak için daha az karakter. : P
    2012-05-02 21: 50: 54Z

CoffeeScript kullanırken çift tırnak işareti kullanırım. İkisinden birini seçip buna sadık kalman konusunda hemfikirim. CoffeeScript, çift tırnak işareti kullanırken enterpolasyon sağlar.

 
"This is my #{name}"

ES6, şablon dizeleri için geri tıklamaları (`) kullanıyor. Muhtemelen bunun iyi bir nedeni vardır, ancak kodlama yaparken enterpolasyon özelliğini elde etmek için string literals karakterini tırnak veya çift tırnaktan geri kenelere değiştirmek zahmetli olabilir. CoffeeScript mükemmel olmayabilir, ancak her yerde aynı dize değişmez karakterini kullanmak (çift tırnak) ve her zaman enterpolasyon yapabilmek hoş bir özelliktir.

 
`This is my ${name}`
    
6
2016-02-07 16: 52: 10Z
  1. Bana göre geri dönüş bu yarışmaya açık bir galibi oldu, (neredeyse) ortak metin dizelerinde hiçbir şey yok, ayrıca var enterpolasyonu
    2016-07-27 08: 15: 43Z

Performans farklarını gördüğünü iddia eden insanlar var: eski posta listesi konusu . Ancak onaylanacak hiçbirini bulamadım.

Ana şey, dizginizin içinde ne tür tırnak işaretleri (çift veya tek) kullandığınıza bakmaktır. Kaçış sayısını düşük tutmaya yardımcı olur. Örneğin, dizelerinizde html ile çalışırken, tek tırnak işaretleri kullanmak daha kolaydır, böylece özniteliklerin etrafındaki tüm çift tırnak işaretlerinden kaçmak zorunda kalmazsınız.

    
5
2008-10-28 10: 43: 19Z
  1. Her ne kadar öznitelikler tek tırnaklarla çevrilmiş olsa da :)
    2008-10-28 15: 16: 56Z
  2. Haklısınız, xml ve xhtml öğelerini çevreleyen çift tırnaklı tırnaklar belirtilen, ancak tek tırnakların kullanılabileceğini düşündüm.
    2008-10-29 18: 15: 06Z

JavaScript ile C # arasında ileri geri atlıyorsanız, parmaklarınızı çift tırnaklı ortak bir kongre için eğitmek en iyisidir.

    
5
2013-07-21 06: 58: 28Z

Aşağıdakileri yaklaşık 20 kez çalıştırıyorum. Ve çift tırnakların yaklaşık% 20 daha hızlı olduğu görülüyor.

Eğlence kısmı, bölüm 2'yi ve bölüm 1'i değiştirirseniz, tek tırnaklar yaklaşık% 20 daha hızlıdır.

 
//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));
    
5
2015-11-21 23: 11: 15Z
  1. Başka bir deyişle, sonraki kodun en hızlı çalıştığını gördünüz. Mikro kıyaslama yaparken sorun budur. Kodu çalıştırırken JS optimizasyonunu yapmak zorundasınız. (JIT’in çalışma şeklinden dolayı Java’yı kıyaslama yaparken bu aynı etkiyi görürsünüz.)
    2011-01-03 06: 46: 08Z
  2. ilk yeni Tarih iyavaş, baştan var dummy_date = new Date() ekleyin
    2012-10-22 10: 31: 16Z
  3. Buradaki mikro optimizasyon düzeyi o kadar aptaldır ki, tek tırnakların daha hızlı yazılmasına neden olarak daha hızlı yazıldığını iddia edebilirsiniz.
    2018-06-13 18: 28: 32Z

Belki daha hızlı veya belki de avantajlı olduğunu söyleyen tüm cevapları okuduktan sonra, çift fiyat teklifinin daha iyi veya daha hızlı olduğunu söyleyebilirim çünkü Google kapatma derleyicisi tek tırnakları çift tırnaklara dönüştürür.

    
4
2011-09-18 05: 22: 02Z
  1. Bunun neden yaptığını biliyor musunuz?
    2012-09-16 18: 09: 04Z
  2. Bilmiyorum. Belki kodlama bir kongredir ve özel bir şey yoktur.
    2012-09-17 03: 19: 27Z

Kesinlikle hiçbir fark yoktur, bu nedenle kaçışların sayısını düşük tutmak, çoğunlukla bir zevk ve dizede ne olduğu (ya da JS kodunun kendisi bir dizede ise) sorunudur.

Hız farkı açıklaması, iki teklifin farklı davranış gösterdiği PHP dünyasından gelebilir.

    
3
2008-10-28 12: 49: 22Z
  1. Ve Ruby ekleyebilirim. Python, JavaScript ile aynı davranışa sahiptir: tek /çift tırnak arasında fark yoktur.
    2008-10-28 15: 19: 15Z

Eğer JS kaynağınız:

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

HTML kaynağı şöyle olacaktır:

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

veya HTML5 için

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

JS böyle dizilere izin verir:

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

Ancak, onu sıkılaştırırsanız, tutarlı bir sebepten dolayı olacaktır:

 
JSON=["this","that"]

Bunun biraz zaman alacağına eminim.

    
3
2014-06-05 07: 06: 12Z

Yalnızca 2 kuruş eklemek için: Birkaç yıl önce hem JS hem de PHP ile çalışırken, tek tırnakları kullanmaya alışkınım, böylece kaçış karakterini ('\') de kaçmak zorunda kalmadan yazabilirim . Genellikle dosya yollarını, vb. Kullanarak ham dizgiler yazarken kullandım ( http: //en.wikipedia). org /wiki /String_literal # Raw_strings )

Her neyse, sözleşmem if (typeof s == 'string') ... (kaçış karakterlerinin hiçbir zaman asla kullanılmayacağı) ve metinler için çifte tırnaklar gibi) tanımlayıcı türü ham dizelerdeki tek tırnakların kullanılmasıydı. "Hey, naber?" gibi. Ayrıca, yorumlayıcıların adlarını göstermek için yorumlarda tek tip tırnak işaretleri kullanıyorum. Bu sadece bir kuraldır ve '<a href="#"> like so <a>' HTML dizelerini yazarken olduğu gibi yalnızca gerektiğinde kırılırım (buradaki alıntıları da tersine çevirebilseniz de). Ayrıca, JSON durumunda, isimler için çift tırnak işareti kullanıldığının farkındayım - ama bunun dışında, kişisel olarak, kaçışlar tırnak işaretleri arasındaki metin için gerekli olduğunda asla olmadığında tek tırnakları tercih ederim. - document.createElement('div') gibi.

Alt satırda ve bazılarının söylediği /ima ettiği gibi, bir kongre seç, ona sadık kal ve yalnızca gerektiğinde sap.     

3
2014-06-12 19: 47: 04Z

Tek tırnak veya çift tırnak kullanabilirsiniz. Bu, örneğin, javascript'i, alıntılardan kaçmaya gerek kalmadan HTML niteliklerinin içine kolayca yerleştirmenizi sağlar. Aynı şey PHP ile javascript oluşturduğunuzda da geçerlidir.

Genel fikir şudur: eğer mümkünse kaçmak zorunda kalmayacakları alıntılar kullanın. Daha az çıkış = daha iyi kod.

    
3
2014-09-10 17: 11: 01Z
kaynak yerleştirildi İşte