जावास्क्रिप्ट में डबल या सिंगल कोट्स का उपयोग कब करें?


1968

console.log("double"); बनाम console.log('single');

मैं स्ट्रिंग्स को हैंडल करते समय अधिक से अधिक जावास्क्रिप्ट पुस्तकालयों को एकल उद्धरणों का उपयोग करते हुए देखता हूं। एक के बाद एक उपयोग करने के क्या कारण हैं? मैंने सोचा कि वे बहुत अधिक विनिमेय हैं।


125
जो पढ़ना आसान है चेतावनी ("यह गेम का समय है"); या अलर्ट ('इट्स गेम टाइम');
रायन मिलर

591
इस रयान के बारे में कैसे? alert("It's \"game\" time.");या alert('It\'s "game" time.');?
फ्रांसिस

37
यदि सिंगल कोट्स हमेशा उपयोग किए जाते हैं और कभी-कभी डबल कोट्स भी होते हैं, जहां शाब्दिक में एकल उद्धरण होता है, तो हमें बहुत कम शिफ्ट बटन टाइप करना होगा और हमारी बाईं छोटी उंगली हमें आशीर्वाद देगी। लेकिन हां, जैसा कि @arne ने कहा, JSON के लिए दोहरे उद्धरण का उपयोग किया जाना चाहिए।
इस्माइल

9
जब आप एक यूरोपीय कीबोर्ड पर हों तो सिंगल क्विंग करना आसान होता है (दोहरा उद्धरण शिफ्ट + 2 है जो आपके दाईं पिंकी द्वारा आसानी से एक कुंजी को टैप करने में उतना प्यारा नहीं है)।
अर्ने

38
@Arne "यूरोपीय कीबोर्ड" जैसी कोई चीज नहीं है। उदाहरण के लिए जर्मन कीबोर्ड को दोनों प्रकार के उद्धरणों के लिए बदलाव की आवश्यकता होती है। (लेकिन एकल उद्धरण आसान हैं।)
एवेस

जवाबों:


1221

विभिन्न पुस्तकालयों में एकल बनाम दोहरे के उपयोग का सबसे संभावित कारण प्रोग्रामर वरीयता और / या एपीआई स्थिरता है। संगत होने के अलावा, जो भी स्ट्रिंग का सबसे अच्छा सूट का उपयोग करें।

शाब्दिक के रूप में अन्य प्रकार के उद्धरण का उपयोग करना:

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

यह जटिल हो सकता है:

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

एक अन्य विकल्प, ES6 में नया, टेम्पलेट शाब्दिक हैं जो back-tickचरित्र का उपयोग करते हैं:

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

टेम्पलेट शाब्दिक के लिए एक स्वच्छ वाक्यविन्यास प्रदान करते हैं: चर प्रक्षेप, बहु-रेखा तार, और बहुत कुछ।

ध्यान दें कि JSON औपचारिक रूप से दोहरे उद्धरण चिह्नों का उपयोग करने के लिए निर्दिष्ट है, जो सिस्टम आवश्यकताओं के आधार पर विचार करने योग्य हो सकता है।


84
सभी कोड सम्मेलनों के साथ ध्यान देने योग्य एक महत्वपूर्ण बिंदु - इसे एक बार परिभाषित करें और इसके साथ रहें। IOW, कहीं और दोहरे उद्धरण चिह्नों का उपयोग न करें।
सेरेब्रस

170
@ सेरेब्रस - मुझे लगता है कि लचीलापन इस एक के साथ ठीक है। सुनिश्चित करें कि एक पसंदीदा शैली चुनें, लेकिन यदि आप एक स्ट्रिंग में बहुत सारे उद्धरण से बचने के लिए शैली से अलग होने की आवश्यकता है। मैं उस के साथ ठीक हो जाएगा।
मार्टिन क्लार्क

5
मुझे नहीं लगता कि इसके अनुरूप होने का कोई कारण है। किसी एक के लिए कोई फायदा नहीं है, और मुझे नहीं लगता कि पठनीयता वास्तव में प्रभावित होती है कि क्या आप एक जगह और 'दूसरे में' का उपयोग करते हैं या नहीं।
cdmckay

2
@ पूरी तरह से, दिलचस्प परीक्षण !! Chrome 13 (OSX) में सिंगल कोट्स वास्तव में दोहरे उद्धरण चिह्नों से कई गुना तेज हैं। दिलचस्प ...
Ricket

12
थोड़ा ऑफ-टॉपिक, लेकिन अगर लोग सही टाइपोग्राफी का उपयोग करते हैं, तो भागने के बारे में इनमें से बहुत सारी चर्चाएं अप्रचलित होंगी: alert('It’s “game” time')बनाम alert("It’s “game” time")- कोई फर्क नहीं पड़ता। आपको केवल (दुर्लभ) मामलों में भागने की आवश्यकता होगी जहां एकल या डबल प्राइम चिन्ह ', "वास्तव में उपयुक्त है।
jotaen

617

यदि आप JSON के साथ काम कर रहे हैं, तो यह ध्यान दिया जाना चाहिए कि कड़ाई से बोलते हुए, JSON तार को डबल उद्धृत किया जाना चाहिए। निश्चित रूप से, कई पुस्तकालय एकल उद्धरणों का भी समर्थन करते हैं, लेकिन मुझे अपनी परियोजनाओं में से एक में यह महसूस करने से पहले बहुत समस्या थी कि स्ट्रिंग उद्धृत करना वास्तव में JSON मानकों के अनुसार नहीं है।


5
यह बहुत प्रासंगिक है जब jQuery.ajax के साथ ASP.NET सेवा (वेब ​​सेवा, पृष्ठ विधि, या MVC) में कॉल किया जाता है।
श्मुली

100
JSON स्ट्रिंग्स के भीतर संपत्ति के नाम दोहरे-उद्धृत होने चाहिए, लेकिन एक पूरे के रूप में एक JSON स्ट्रिंग एकल-उद्धृत किया जा सकता है: var jsonString = '{"key1":"value1"}';(यह नहीं कि मैं मैन्युअल रूप से JSON बनाने की सलाह देता हूं।)
nnnnnn

51
यदि आप कर सकते हैं तो आपको हाथ से JSON नहीं लिखना चाहिए .stringify()
कैमिलो मार्टिन

23
यहाँ यह हमेशा दोहरे उद्धरण चिह्नों का उपयोग करने का सबसे अच्छा तर्क है। JSON में दोहरे-उद्धरण होने चाहिए। अन्य उत्तर ज्यादातर "सुसंगत" होने की सलाह दे रहे हैं, जिसका अर्थ है कि यदि भाषा का कोई एक हिस्सा वास्तविक रूप से एक दोहरे उद्धरण को मजबूर कर सकता है, तो आपको लगातार उस दोहरे उद्धरण का उपयोग करना चाहिए।
क़रीबौ जूल

18
कई भाषाओं के साथ काम करते समय यह भी प्रासंगिक है जहां लगभग सभी अन्य lanuguages ​​(जावा, सी, सी ++, ...) स्ट्रिंग्स के लिए दोहरे उद्धरण चिह्नों के लिए और एकल उद्धरण का उपयोग करते हैं। मैं बोर्ड भर में एक ही उद्धरण का उपयोग करना पसंद करता हूं और इसलिए JS के लिए दोहरे उद्धरण चिह्नों के साथ रहना चाहता हूं। स्पर्श के वर्षों के साथ दोहरे कोट्स को शिफ्ट करने के लिए अतिरिक्त कुंजी टाइप करना पूरी तरह से अप्रासंगिक है, और यदि आपका कोडिंग आपके टाइपिंग से विवश है तो आपको ठीक से टाइपिंग का अभ्यास करने की आवश्यकता है।
लॉरेंस डॉल

336

कोई एक बेहतर उपाय नहीं है ; हालाँकि, मैं तर्क देना चाहूँगा कि दोहरे उद्धरण कई बार अधिक वांछनीय हो सकते हैं:

  • नवागंतुक पहले से ही अपनी भाषा के दोहरे उद्धरणों से परिचित होंगे । अंग्रेजी में, हमें "उद्धृत पाठ के पारित होने की पहचान करने के लिए दोहरे उद्धरण चिह्नों का उपयोग करना चाहिए । यदि हम किसी एक उद्धरण का उपयोग करते हैं ', तो पाठक इसे एक संकुचन के रूप में गलत समझा सकता है। पाठ से घिरा हुआ मार्ग का दूसरा अर्थ ''बोलचाल' के अर्थ को इंगित करता है। यह पहले से मौजूद भाषाओं के अनुरूप रहने के लिए समझ में आता है, और इससे कोड की सीखने और व्याख्या में आसानी हो सकती है।
  • डबल उद्धरण apostrophes (संकुचन के रूप में) से बचने की आवश्यकता को समाप्त करते हैं । स्ट्रिंग पर विचार करें: "I'm going to the mall"बनाम, अन्यथा बच गए संस्करण 'I\'m going to the mall':।
  • डबल कोट्स का अर्थ कई अन्य भाषाओं में एक स्ट्रिंग है । जब आप जावा या सी जैसी नई भाषा सीखते हैं, तो दोहरे उद्धरण चिह्नों का उपयोग किया जाता है। रूबी, पीएचपी और पर्ल में, एकल-उद्धृत स्ट्रिंग्स का कोई मतलब नहीं है, जबकि दोहरे उद्धरण उनका समर्थन करते हैं।

  • JSON अंकन दोहरे उद्धरण चिह्नों के साथ लिखा जाता है।

फिर भी, जैसा कि अन्य लोगों ने कहा है, लगातार बने रहना सबसे महत्वपूर्ण है।


अंग्रेजी भाषा के बारे में आपका पहला बिंदु हमेशा सच नहीं होता है और यह स्थानीयता / घर के सम्मेलन के आधार पर बदल सकता है। मुद्रित सामग्री आम तौर पर भाषण के लिए एकल-उद्धरण का उपयोग करती है और उद्धृत पाठ के बड़े ब्लॉकों के लिए अन्य स्वरूपण का उपयोग करती है। आपका 'बोलचाल' अर्थ जोर देने के लिए उद्धरण की एक उपयोगी परिभाषा नहीं है। साथ ही अंग्रेजी उपयोगकर्ता सामान्य रूप से उद्धरण चिह्नों और एपोस्ट्रोफ के साथ बहुत खराब हैं।
जॉन फर्ग्यूसन

2
@ जॉनफर्गसन, अकेले इस कारण से, डबल-कोट्स का उपयोग करने के लिए वांछनीय हो सकता है ताकि विभेदन (एपोस्ट्रोफ और उद्धृत मार्ग के बीच) किया जा सके।
user1429980

मैं व्यावहारिकता के बारे में हूँ। इस तथ्य के कारण कि मैं टाइप करने या उपयोग करने वाले 100 में से 1 में दोहरे उद्धरण चिह्नों का उपयोग करता हूं, और कई, कई और अधिक एपोस्ट्रोफिस हैं, मैं युगल का उपयोग करता हूं। दिन के अंत में, हालांकि, आपको परियोजना में पहले से उपयोग किए जाने वाले उद्धरण प्रकार का उपयोग करना चाहिए) यदि आप परियोजना के नए डेवलपर हैं, या 2) आप जो सोचते हैं उसका उपयोग करें।
ud१४

बिंदु में मामला - मैंने अभी क्या टाइप किया है (कई एपोस्ट्रोफ़्स हैं, कोई दोहरे उद्धरण नहीं हैं?)
ड्यूडेवड

: - FWIW यह एक Quora लेख से एक उद्धरण है quora.com/...
theUtherSide

118

विनिर्देश की धारा 7.8.4 शाब्दिक स्ट्रिंग संकेतन का वर्णन करती है। अंतर केवल इतना है कि DoubleStringCharacter "SourceCharacter है, लेकिन Double-quote नहीं" और SingleStringCharacter "SourceCharacter है, लेकिन एकल-उद्धरण नहीं"। इसलिए केवल अंतर को इस प्रकार प्रदर्शित किया जा सकता है:

'A string that\'s single quoted'

"A string that's double quoted"

तो यह इस बात पर निर्भर करता है कि आप कितना भागना चाहते हैं। जाहिर है कि दोहरे उद्धरण चिह्नों में दोहरे उद्धरणों पर भी यही बात लागू होती है।


@ गैरेथ: मैं हालांकि विनिर्देशों के बारे में बात नहीं कर रहा था, मैं संभावित प्रदर्शन प्रभाव के बारे में बात कर रहा था। stackoverflow.com/questions/242813/…
मैथियास ब्यानेन्स

यदि आप शिफ्ट + 'को हिट करने के लिए कितनी बार जरूरत के लिए अपने कोड में पर्याप्त apostrophes डाल रहे हैं तो आप इसे गलत कर रहे हैं।
SgtPooki

1
"{\"name\": \"Peter\"}"बनाम के बारे में क्या '{"name": "Peter"}'? बेशक, आप कह सकते हैं कि यह समान अंतर है, लेकिन यह निश्चित रूप से ऊपर के उदाहरण की तुलना में आपके निर्णय को एक अलग तरीके से प्रभावित करेगा।
ट्रेवर

@MathiasBynens - यह एक दिलचस्प अवलोकन है जो कम से कम एक साल के लिए प्रासंगिक नहीं है, और शायद 6 साल तक।
ArtOfWarfare

4
एक एपोस्ट्रोप के लिए U + 2019 का उपयोग करना चाहिए, एक ऊर्ध्वाधर-एकल-उद्धरण नहीं
jjg

95

एकल कोट

मेरी इच्छा है कि दोहरे उद्धरण मानक थे, क्योंकि वे थोड़ा अधिक समझ में आते हैं , लेकिन मैं एकल उद्धरण का उपयोग करता रहता हूं क्योंकि वे दृश्य पर हावी होते हैं।

एकल कोट:

कोई वरीयता नहीं:

डबल उद्धरण:


7
क्रॉकफोर्ड अब दोहरे उद्धरण चिह्नों को पसंद करता है।
एडम कैल्वेट बोहल

6
airbnb अब डबल कोट्स पसंद करती है
सूरज जैन

15
@ सूरजजैन सोर्स? Airbnb और Google स्टाइल गाइड अभी भी एकल सूची को पसंद करते हैं।
एलेक मेव

5
@ सुरजजैन आह, ये कोड स्टाइल चेकर कॉन्फिग हैं, जो JSON में लिखे गए हैं, जो सिंगल कोट्स की अनुमति नहीं देता है। उन्हें पढ़ना विभिन्न परियोजनाओं द्वारा किए गए विकल्पों की तुलना करने का एक अच्छा तरीका है।
एलेक मेव

2
Google अब एकल उद्धरण पसंद करता है
गेब्रियलहोशीरो

57

मैं कहना चाहूंगा कि अंतर विशुद्ध रूप से शैलीगत है, लेकिन मैं वास्तव में अपनी शंका कर रहा हूं। निम्नलिखित उदाहरण पर विचार करें:

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

सफारी, क्रोम, ओपेरा और इंटरनेट एक्सप्लोरर (आईई 7 और आईई 8 में परीक्षण) के बाद, यह निम्नलिखित लौट आएगा:

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

हालांकि, फ़ायरफ़ॉक्स थोड़ा अलग परिणाम देगा:

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

सिंगल कोट्स को डबल कोट्स से बदल दिया गया है। (यह भी ध्यान दें कि इंडेंटिंग स्पेस को चार स्थानों से कैसे बदला गया।) इससे यह आभास होता है कि कम से कम एक ब्राउज़र जावास्क्रिप्ट को आंतरिक रूप से पार्स करता है जैसे कि डबल कोट्स का उपयोग करके सब कुछ लिखा गया था। कोई सोच सकता है, अगर यह पहले से ही इस 'मानक' के अनुसार सब कुछ लिखा गया है तो जावास्क्रिप्ट को पार्स करने के लिए फ़ायरफ़ॉक्स को कम समय लगता है।

जो, वैसे, मुझे एक बहुत दुखद पांडा बनाता है, क्योंकि मुझे लगता है कि एकल उद्धरण कोड में बहुत अच्छे लगते हैं। साथ ही, अन्य प्रोग्रामिंग भाषाओं में, वे आमतौर पर दोहरे उद्धरण चिह्नों का उपयोग करने के लिए तेज़ होते हैं, इसलिए यह केवल तभी समझ में आता है जब वही जावास्क्रिप्ट पर लागू होता है।

निष्कर्ष: मुझे लगता है कि हमें इस पर और अधिक शोध करने की आवश्यकता है।

संपादित करें: यह 2003 में वापस से पीटर-पॉल कोच के परीक्षा परिणामों की व्याख्या कर सकता है ।

ऐसा लगता है कि एक्सप्लोरर विंडोज में कभी-कभी एकल उद्धरण तेज होते हैं (मेरे परीक्षणों के 1/3 ने तेजी से प्रतिक्रिया समय दिखाया), लेकिन अगर मोज़िला बिल्कुल अंतर दिखाता है, तो यह दोहरे उद्धरणों को थोड़ा तेजी से संभालता है। मुझे ऑपेरा में कोई अंतर नहीं मिला।

संपादित करें 2014: फ़ायरफ़ॉक्स / स्पाइडरमोंकी के आधुनिक संस्करण अब ऐसा नहीं करते हैं।


25
यदि यह एक ब्राउज़र में थोड़ा तेज़ है तो इसे एक तरह से करें और दूसरे तरीके से इसे करने के लिए थोड़ा तेज़ करें, ऐसा लगता है कि एकमात्र मार्गदर्शन जिसे हम दूर ले जा सकते हैं, वह यह है कि हमें वह करना चाहिए जो हमें अधिक पसंद है क्योंकि यह कुछ को चोट पहुंचाएगा उपयोगकर्ता और दूसरों की मदद करते हैं, और अंतर की मात्रा अगोचर होने की संभावना है। "समय से पहले अनुकूलन ..." और वह सब।
एंड्रयू हेजेज

2
मुझे खेद है कि मेरी टिप्पणी अधिक रचनात्मक नहीं थी। मैं केवल यह कह रहा हूं कि ब्राउज़र सिंटैक्स के अपने आंतरिक प्रतिनिधित्व को कैसे चुनता है, शायद यह बहुत कम है कि इसे कैसे पार्स किया जाता है और इसलिए संभवतः एक प्रकार के उद्धरण को दूसरे पर पसंद करने का कोई कारण नहीं है। प्रदर्शन डेटा, दूसरी ओर, एकल और दोहरे उद्धरण चिह्नों के लिए पार्स समय की तुलना करना अधिक सम्मोहक होगा।
क्रिस कैलो

1
यह एक भयानक जवाब है, बाकी हिस्सों से एक ब्रेक जो सिर्फ 'वे' को चिरते हैं, वे फिर से वही हैं ... आपने कहा "", अन्य प्रोग्रामिंग भाषाओं में, वे आमतौर पर दोहरे की तुलना में तेजी से उपयोग करते हैं। उद्धरण " , क्या मैं पूछ सकता हूं कि कौन सी भाषाएं हैं? मैंने जावा और सी # जैसे नियमित लैंग्स का उपयोग किया है, जेएस के अलावा कभी भी एक दूसरे को नहीं देखा जो एकल उद्धरणों में स्ट्रिंग शाब्दिक स्वीकार करते हैं। एकल उद्धरण बाड़ों को आमतौर पर केवल चरित्र स्थिरांक (केवल एक चार अनुमति) के लिए उपयोग किया जाता है।
ADTC

3
AFAIK यह फ़ायरफ़ॉक्स 17 में तय किया गया था, फ़ायरफ़ॉक्स करते समय अपघटन करता था .toStringलेकिन अब यह मूल प्रति लौटाता है। आधुनिक फ़ायरफ़ॉक्स में यह समस्या नहीं होगी।
बेंजामिन ग्रुएनबाम

3
गति के अंतर के बारे में नहीं जानते। लेकिन मैं यह नोट करना चाहता हूं कि "यह धारणा देता है कि कम से कम एक ब्राउज़र जावास्क्रिप्ट को आंतरिक रूप से पार्स करता है जैसे कि सब कुछ दोहरे उद्धरण चिह्नों का उपयोग करके लिखा गया था।" बकवास है। यह UNparsed के रूप में अगर डबल उद्धरण के साथ लिखा है। यह एक आंतरिक पठनीय संस्करण में इसके आंतरिक प्रतिनिधित्व (जो सिर्फ स्ट्रिंग को संग्रहीत करता है, उद्धरणों को नहीं) को बदल दिया गया है, जिसके लिए यह उद्धरण के एक सेट का उपयोग करने के लिए होता है। किसी भी तरह, यह बेंजामिन की टिप्पणी के अनुसार, बदल गया लगता है।
8

32

यदि आप इनलाइन जावास्क्रिप्ट कर रहे हैं (यकीनन एक "बुरी" चीज है, लेकिन उस चर्चा से बचना) एकल उद्धरण स्ट्रिंग शाब्दिकों के लिए एकमात्र विकल्प हैं, मेरा मानना ​​है।

उदाहरण के लिए, यह ठीक काम करता है:

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

लेकिन आप "हाय" को दोहरे उद्धरण चिह्नों में नहीं लपेट सकते, किसी भी बचने की विधि के माध्यम से जिसके बारे में मुझे पता है। यहां तक ​​कि &quot;जो मेरा सबसे अच्छा अनुमान था (चूंकि आप HTML के एक विशेषता मूल्य में उद्धरणों से बच रहे हैं) फ़ायरफ़ॉक्स में मेरे लिए काम नहीं करता है। \"इस वजह से भी काम नहीं करेगा क्योंकि आप HTML के लिए बच रहे हैं, जावास्क्रिप्ट के लिए नहीं।

इसलिए, यदि गेम का नाम संगति है, और आप अपने ऐप के कुछ हिस्सों में कुछ इनलाइन जावास्क्रिप्ट करने जा रहे हैं, तो मुझे लगता है कि सिंगल कोट्स विजेता हैं। यदि कोई गलत है तो कृपया मुझे सही करें।


8
यकीनन एक बुरी बात के बारे में सहमत हैं, हालांकि अगर यह किया जाना चाहिए, तो मुझे पूरा यकीन है कि यूआरएल-शैली एन्कोडिंग का उपयोग किया जा सकता है जैसे <a onclick="alert(%22hi%22);">hi</a>- मेमोरी से यह काम करता है, हालांकि इसके बजाय href विशेषता में हो सकता है<a href="javascript:alert(%22hi%22);">hi</a>
Graza

2
@PhiLho आप इस बारे में सही हैं ... मैं मान रहा था कि लोग पारंपरिक रूप से दोहरे-उद्धृत HTML विशेषताओं को लिख रहे थे, और या तो नहीं जा रहे थे (1) थोक सब कुछ एकल उद्धरण में परिवर्तित करते हैं, या (2) मिक्स-एंड मैच एकल और डबल उद्धृत विशेषताएँ। लेकिन हां, आप सही हैं कि यह कानूनी है
टॉम लियाज़ा

4
@ टॉम लिंजा, निश्चित रूप alert(&quot;hi&quot;)से मान्य जावास्क्रिप्ट नहीं है। लेकिन विशेषताओं के मूल्यों को कूटबद्ध किया जाता है। w3.org/TR/html4/intro/sgmltut.html#didx-attribute
रॉबर्ट

4
यहां @Robert से सहमत हैं। &quot;एक HTML विशेषता के अंदर एक दोहरी बोली से बचने का सही तरीका है। यह फ़ायरफ़ॉक्स में ठीक काम करता है। @ डीनिलसन, एक्सएमएल (और इसलिए एक्सएचटीएमएल) सिंगल और डबल दोनों कोट्स की अनुमति देता है। AttValueएक्सएमएल कल्पना में w3.org/TR/REC-xml/#d0e888 पर शाब्दिक देखें ।
क्रिस कैलो

1
@Pacener: क्योंकि यह उह, गलत नहीं है। डबल कोट्स के बीच विशेषताएँ डालने के लिए HTML में एक कन्वेंशन है।
कोनराड बोरोस्की

30

तकनीकी रूप से कोई अंतर नहीं है, यह केवल शैली और सम्मेलन की बात है।

डगलस क्रॉकफोर्ड आंतरिक स्ट्रिंग्स के लिए एकल उद्धरण और बाहरी के लिए दोहरे उद्धरण चिह्नों का उपयोग करने की सिफारिश करता है (बाहरी से हमारा मतलब है कि उन्हें एप्लिकेशन के उपयोगकर्ता को प्रदर्शित किया जाना चाहिए, जैसे संदेश या अलर्ट)।

मैं व्यक्तिगत रूप से इसका पालन करता हूं।

अद्यतन: ऐसा प्रतीत होता है कि मिस्टर क्रॉकफोर्ड ने अपना विचार बदल दिया और अब पूरे दोहरे उद्धरणों का उपयोग करने की सलाह देते हैं :)


13
डगलस क्रॉकफोर्ड बनाम JQuery। अपना ज़हर उठाएं।
एरिक

इसके लिए क्रॉकफोर्ड का तर्क क्या है?
BadHorsie 13

1
यह वह सम्मेलन है जिसका मैं अनुसरण करता हूं। यह अधिक व्यक्तिगत प्राथमिकता है। मुझे jQuery के चयनकर्ताओं, और / या getElementById ('id') जैसी आंतरिक चीज़ों के लिए एकल उद्धृत स्ट्रिंग्स का उपयोग करना पसंद है; मुझे यह उसी तरह पसंद है जैसे यह एकल उद्धरण के साथ दिखता है। लेकिन, बाहरी पाठ के लिए दोहरे उद्धरण चिह्नों पर जाएं, क्योंकि अक्सर पाठ में आंतरिक उद्धरण शामिल हो सकते हैं। इसके अलावा, यदि आप एक या दूसरे में त्रुटि खोजने की कोशिश कर रहे हैं तो बाहरी बनाम आंतरिक तारों के बीच अंतर करना और अंतर करना आसान बनाता है।
adimauro

3
अप्रैल 2016 तक, डगलस क्रॉकफ़ोर्ड अब केवल दोहरे उद्धरण चिह्नों का उपयोग करने की सिफारिश करता है , यह देखते हुए कि व्यवहार में, कई डेवलपर्स ने आंतरिक बनाम बाहरी द्विभाजन का उपयोग करना मुश्किल पाया।
थंडरफॉज

27

सख्ती से बोलना, अर्थ में कोई अंतर नहीं है; तो चुनाव सुविधा के लिए नीचे आता है।

यहाँ कई कारक हैं जो आपकी पसंद को प्रभावित कर सकते हैं:

  • हाउस शैली: डेवलपर्स के कुछ समूह पहले से ही एक सम्मेलन या दूसरे का उपयोग करते हैं।
  • क्लाइंट-साइड आवश्यकताएँ: क्या आप स्ट्रिंग्स के भीतर उद्धरणों का उपयोग करेंगे? (आदि का जवाब देखें)।
  • सर्वर-साइड भाषा: VB.Net लोग जावा-स्क्रिप्ट के लिए सिंगल कोट्स का उपयोग करने का विकल्प चुन सकते हैं ताकि स्क्रिप्ट्स को सर्वर-साइड बनाया जा सके (VB.Net स्ट्रिंग्स के लिए डबल-कोट्स का उपयोग करता है, इसलिए जावा-स्क्रिप्ट स्ट्रिंग्स को प्रतिष्ठित करना आसान है अगर वे सिंगल कोट्स का उपयोग करते हैं)।
  • लाइब्रेरी कोड: यदि आप किसी विशेष शैली का उपयोग करने वाले पुस्तकालय का उपयोग कर रहे हैं, तो आप स्वयं उसी शैली का उपयोग करने पर विचार कर सकते हैं।
  • व्यक्तिगत पसंद: आप सोच सकते हैं कि एक या अन्य शैली बेहतर दिखती है।

सही नहीं है, 'है 00100111, बाइनरी में जबकि "है 00100010बाइनरी में। इस प्रकार, दोहरे उद्धरणों को एकल उद्धरणों के रूप में संग्रहीत करने में आधी शक्ति लगती है। वहीं फर्क है।

19

आइए देखें कि एक संदर्भ क्या करता है।

Jquery.js के अंदर, हर स्ट्रिंग डबल-कोटेड है।

इसलिए, अब शुरुआत करते हुए, मैं दोहरे-उद्धृत स्ट्रिंग्स का उपयोग करूंगा। (मैं एकल का उपयोग कर रहा था!)


11
यह नीचे मतदान क्यों है। यह शैली का सवाल है और सबसे अच्छी शैली सुसंगत होना है और उन लोगों का अनुसरण करना है जो आपके सामने आए थे।
एरिक

2
+1 jQuery एपीआई प्रलेखन भी करता है। यही एक कारण था जिससे मैं दोहरे उद्धरण चिह्नों के लिए बस गया। व्यक्तिगत रूप से, मुझे लगता है कि जवाब है कि "यह व्यक्तिगत प्राथमिकता के लिए नीचे आता है" थोड़ा त्रुटिपूर्ण हैं - एक व्यापक रूप से इस्तेमाल किए गए सम्मेलन का पता लगाने और इसके साथ छड़ी करने के लिए सबसे अच्छा है। और जब से मैं jQuery से उदाहरणों को कॉपी और पेस्ट करना चाहता हूं (प्रत्यक्ष या अप्रत्यक्ष रूप से), मैं हर बार उद्धरणों को बदलना नहीं चाहता।
स्टीव चेम्बर्स

2
शायद jQuery पहले लोगों का पालन करने में विफल रहा (या वास्तव में परवाह नहीं की, अधिकांश अन्य विशेषज्ञों की तरह)। ;)
जेम्स विल्किंस

14

बस जो आप उपयोग करते हैं उसमें निरंतरता रखें। लेकिन अपने आराम के स्तर को कम मत करो।

"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

ईएस 6 अपडेट

टेम्पलेट शाब्दिक वाक्य रचना का उपयोग करना ।

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

13

यह ज्यादातर शैली और पसंद की बात है। अन्य उत्तरों में कुछ बल्कि दिलचस्प और उपयोगी तकनीकी खोज हैं, इसलिए शायद मैं केवल यही जोड़ सकता हूं कि थोड़ी सांसारिक सलाह दें।

  • यदि आप किसी कंपनी या टीम में कोडिंग कर रहे हैं, तो "हाउस स्टाइल" का पालन करना एक अच्छा विचार है।

  • यदि आप अकेले कुछ साइड प्रोजेक्ट्स को हैक कर रहे हैं, तो समुदाय के कुछ प्रमुख नेताओं को देखें। जैसे आप कहते हैं कि आप Node.js. कोर मॉड्यूल पर एक नज़र डालें, उदाहरण के लिए अंडरस्कोर.जेएस या एक्सप्रेस और देखें कि वे किस कन्वेंशन का उपयोग करते हैं, और निम्नलिखित पर विचार करें।

  • यदि दोनों सम्मेलनों का समान रूप से उपयोग किया जाता है, तो अपनी व्यक्तिगत
    पसंद को टाल दें।

  • यदि आपकी कोई व्यक्तिगत पसंद नहीं है, तो एक सिक्का फ्लिप करें।

  • यदि आपके पास एक सिक्का नहीं है, तो बीयर मुझ पर है;)


13

मुझे उम्मीद है कि मैं कुछ स्पष्ट नहीं जोड़ रहा हूं, लेकिन मैं Django और Ajax के साथ संघर्ष कर रहा हूं इस पर और JSON के ।

यह मानते हुए कि आपके HTML कोड में आप दोहरे उद्धरण चिह्नों का उपयोग करते हैं, जैसा कि आम तौर पर होना चाहिए, मैं अत्यधिक जावास्क्रिप्ट में बाकी के लिए एकल उद्धरणों का उपयोग करने का सुझाव देता हूं।

इसलिए मैं @ady से सहमत हूं लेकिन कुछ देखभाल के साथ।

मेरी लब्बोलुआब यह है: जावास्क्रिप्ट में शायद यह कोई फर्क नहीं पड़ता है, लेकिन जैसे ही आप इसे HTML के अंदर एम्बेड करते हैं या जैसे आप परेशानी शुरू करते हैं। आपको पता होना चाहिए कि वास्तव में क्या बच रहा है, पढ़ना, अपना स्ट्रिंग पास करना।

मेरा साधारण मामला था:

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

आप showThis के तीसरे क्षेत्र में \ 'हाजिर कर सकते हैं।

डबल उद्धरण काम नहीं किया!

यह स्पष्ट है कि क्यों, लेकिन यह भी स्पष्ट है कि हमें सिंगल कोट्स पर क्यों रहना चाहिए… .. मुझे लगता है ..

यह मामला एक बहुत ही सरल HTML एम्बेडिंग है, त्रुटि एक सरल प्रतिलिपि / पेस्ट द्वारा 'डबल उद्धृत' जावास्क्रिप्ट कोड से उत्पन्न हुई थी।

तो सवाल का जवाब देने के लिए:

HTML के भीतर एकल उद्धरण का उपयोग करने का प्रयास करें। यह डिबग मुद्दों के एक जोड़े को बचा सकता है ...


1
मैं ES6 स्ट्रिंग प्रक्षेप (बैकटिक्स) के साथ एक समान समस्या में भाग गया। मेरे बिल्ड सिस्टम ने इसे दोहरे-उद्धरण वाले स्ट्रिंग के लिए संकलित किया, जिसने एक प्रामाणिक शीर्ष लेख को तोड़ दिया जो एकल उद्धरणों के साथ काम कर रहा था!
जय

12

यकीन नहीं होता कि यह आज की दुनिया में प्रासंगिक है, लेकिन दोहरे उद्धरण चिह्नों का उपयोग सामग्री के लिए किया जाना चाहिए जो नियंत्रित वर्णों के लिए आवश्यक हैं और तार के लिए एकल उद्धरण जो नहीं थे।

संकलक एक भी उद्धृत स्ट्रिंग को शाब्दिक रूप से अछूता छोड़ते हुए एक डबल उद्धृत स्ट्रिंग पर स्ट्रिंग हेरफेर चलाएगा। इस तार की तरह नियंत्रण वर्ण नहीं था के लिए एकल उद्धरण का उपयोग करने का चयन 'अच्छा' डेवलपर्स के लिए नेतृत्व करने के लिए प्रयोग किया जाता है \nया \0डबल कोट्स (सिंगल कोट्स के अंदर संसाधित नहीं) और जब वे के लिए CPU चक्र में मामूली कीमत पर स्ट्रिंग पार्स (जरूरत स्ट्रिंग प्रसंस्करण)।


14
ऐसा नहीं है कि चीजों को एक तरह से किया जाता था और अब वे एक और किया जाता है। अलग-अलग भाषाएं अलग-अलग उद्धरणों को संभालती हैं, और जैसा आप वर्णन करते हैं कुछ काम करते हैं। लेकिन यह एक जावास्क्रिप्ट सवाल है। एकल और दोहरे उद्धरणों का व्यवहार जावास्क्रिप्ट में किया जाता है (भागने के बिना स्ट्रिंग में अन्य प्रकार के उद्धरण का उपयोग करने की अनुमति देने के लिए छोड़कर)। नियंत्रण पात्रों या स्ट्रिंग प्रक्षेप की अनुमति देने वाले दोहरे उद्धरणों का कोई सवाल ही नहीं है। जावास्क्रिप्ट उस तरह काम नहीं करता है। नियंत्रण वर्ण और भागने के क्रम आपके द्वारा उपयोग किए जाने वाले उद्धरण के समान कार्य करते हैं।
माइकल गीरी

पूर्व-पर्ल प्रोग्रामर के रूप में, यह वही है जो मैं सोचता रहता हूं, हालांकि मैं जेएस में इसके अप्रासंगिक होने को जानता हूं।
zkent

12

यदि आप jshint का उपयोग कर रहे हैं , तो यदि आप दोहरे उद्धरण स्ट्रिंग का उपयोग करते हैं तो यह एक त्रुटि उत्पन्न करेगा।

मैंने इसे AngularJS के योमन स्कैफॉल्डिंग के माध्यम से इस्तेमाल किया, लेकिन शायद इसे कॉन्फ़िगर करने के लिए किसी तरह से एक मनेर है।

वैसे, जब आप HTML को जावास्क्रिप्ट में संभालते हैं, तो एकल उद्धरण का उपयोग करना आसान होता है:

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

और कम से कम JSON रीप्रेंसेंट स्ट्रिंग्स के लिए दोहरे उद्धरण चिह्नों का उपयोग कर रहा है।

आपके प्रश्न का उत्तर देने का कोई तुच्छ तरीका नहीं है


क्या कार्यान्वयन जंतर बदल गया है? चूंकि डेमो वेबसाइट किसी भी चेतावनी / त्रुटियों को फेंकने के बिना या तो स्वीकार करने लगती है और मुझे jshint का उपयोग करने के लिए बाध्य करने के लिए कोई विकल्प नहीं मिल सकता है। शायद यह जवाब पुराना या गलत है?
ली हेस

अगर jshint एक दोहरे उद्धृत स्ट्रिंग के लिए एक त्रुटि उठाता है, तो इसका गंभीर रूप से टूट गया है। जावास्क्रिप्ट मानक परिभाषित करता है कि क्या सही है और कुछ टूटे हुए लिंटर नहीं है।
मीकी

10

प्रदर्शन के बारे में बात करते हुए, उद्धरण कभी भी आपकी अड़चन नहीं होंगे, हालांकि, प्रदर्शन दोनों मामलों में समान है।

कोडिंग गति के बारे में बात करते हुए, यदि आप 'एक स्ट्रिंग को परिसीमित करने के लिए उपयोग करते हैं , तो आपको "उद्धरण से बचने की आवश्यकता होगी । आपको उपयोग करने की अधिक संभावना है" स्ट्रिंग के अंदर , उदाहरण के लिए:

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

फिर, मैं 'स्ट्रिंग को सीमांकित करने के लिए उपयोग करना पसंद करता हूं , इसलिए मुझे कम पात्रों से बचना होगा।


10

एकल उद्धरणों का उपयोग करने का एक (मूर्खतापूर्ण) कारण यह होगा कि उन्हें टाइप करने के लिए आपको शिफ्ट कुंजी को हिट करने की आवश्यकता नहीं है, जबकि एक डबल उद्धरण करते हैं। (मैं मान रहा हूं कि औसत स्ट्रिंग को भागने की आवश्यकता नहीं है, जो एक उचित धारणा है।) अब, मान लीजिए कि मैं हर दिन कोड की 200 लाइनों को कोड करता हूं। शायद उन 200 लाइनों में मेरे 30 उद्धरण हैं। हो सकता है कि सिंगल कोट टाइप करने की तुलना में एक दोहरे उद्धरण टाइप करने में 0.1 सेकंड अधिक समय लगता है (क्योंकि मुझे शिफ्ट कुंजी को हिट करना है)। फिर किसी भी दिन, मैं 3 सेकंड बर्बाद करता हूं। अगर मैं 40 साल के लिए 200 दिनों के लिए इस तरीके से कोड करता हूं, तो मैंने अपने जीवन के 6.7 घंटे बर्बाद कर दिए हैं। सोच के लिए भोजन।


1
मुझे लगता है कि आप केवल अंग्रेजी कीबोर्ड लेआउट की बात कर रहे हैं ... मेरे पास एक जर्मन है, मुझे दोनों के लिए बदलाव करना होगा। वैसे भी मैं यह नहीं देखता कि शिफ्ट कुंजी दबाने से प्रक्रिया में समय क्यों लगता है। मैंने बाएं हाथ से पारी को मारा, और दाईं ओर बोली की कुंजी दबाएं। यह एक ही समय में होता है, मेरे लिए कोई अंतर नहीं है।
कोडवर्डर

1
@codewandler शिफ्ट कुंजी को दबाने की लागत अभी भी है, भले ही आप इसे "कुंजी के समानांतर" में दबा सकते हैं। यह आपको अपनी डिफ़ॉल्ट स्थिति से एक उंगली को दूर ले जाने के लिए मजबूर करता है। उदाहरण के लिए, मान लें कि आप टाइप कर रहे हैं: var description = "This is a \"quick\" test";पर एक अंग्रेजी कीबोर्ड। एक अंग्रेजी कीबोर्ड के लिए, आपकी पिंकी उंगली को ए की कुंजी से क्यू कुंजी की ओर जाने के बजाय ऊपर की पंक्ति पर क्यू कुंजी तक बाईं ओर की कुंजी से स्थानांतरित करना होगा। दूसरे शब्दों में, इसे दो बार दूरी तय करनी होगी। मुझे यकीन नहीं है कि जर्मन कीबोर्ड पर चाबियाँ कहां हैं, लेकिन मुझे यकीन है कि एक अनुरूप उदाहरण है।
जॉन कुर्लाक

2
@codewandler इसके अलावा, अगर मैं इसे समानांतर में भी कर सकता हूं, तो शिफ्ट टाइप करने के बाद, बाईं पिंकी उंगली को आप जो भी टाइप कर रहे हैं, उसके बाद अगला चरित्र टाइप करने के लिए तैयार करने की अनुमति नहीं देता है।
जॉन कुर्लाक

1
"टाइम वेस्ट" विचार थोड़ा मूर्खतापूर्ण है, लेकिन कम एर्गोनोमिक स्ट्रेन का विचार (विशेष रूप से कार्पल टनल सिंड्रोम की उम्र में, आदि), इसे एक अच्छा लाभ बनाता है, खासकर उन मामलों में जहां यह अन्यथा कोई फर्क नहीं पड़ता। प्रति दिन 1,000 से अधिक लाइनों को देखते हुए, यह सैकड़ों दैनिक पिंकी झुक सकता है।
बिज़ोर

9

पेशेवरों और विपक्षों की जांच करना

एकल उद्धरण के पक्ष में

  • कम दृश्य अव्यवस्था।
  • HTML उत्पन्न करना: HTML विशेषताओं को आमतौर पर दोहरे उद्धरण चिह्नों द्वारा सीमांकित किया जाता है।

elem.innerHTML = '<a href="' + url + '">Hello</a>';
हालाँकि, एकल उद्धरण HTML में केवल कानूनी हैं।

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

इसके अलावा, इनलाइन HTML आम तौर पर एक विरोधी पैटर्न है। टेम्पलेट्स को प्राथमिकता दें।

  • JSON उत्पन्न करना: JSON में केवल दोहरे उद्धरण चिह्नों की अनुमति है।

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

फिर, आपको इस तरह से JSON का निर्माण नहीं करना चाहिए। JSON.stringify () अक्सर पर्याप्त होता है। यदि नहीं, तो टेम्प्लेट का उपयोग करें।

दोहरे भावों के पक्ष में

  • यदि आपके पास कलर कोडिंग नहीं है तो डबल्स को स्पॉट करना आसान है। जैसे कंसोल लॉग या किसी तरह का व्यू-सोर्स सेटअप।
  • अन्य भाषाओं की समानता: शेल प्रोग्रामिंग (बैश इत्यादि) में, एकल-उद्धृत स्ट्रिंग शाब्दिक मौजूद हैं, लेकिन उनके अंदर पलायन की व्याख्या नहीं की जाती है। सी और जावा स्ट्रिंग्स के लिए दोहरे उद्धरण चिह्नों और पात्रों के लिए एकल उद्धरण का उपयोग करते हैं।
  • यदि आप चाहते हैं कि कोड मान्य JSON हो, तो आपको दोहरे उद्धरण चिह्नों का उपयोग करना होगा।

दोनों के पक्ष में

जावास्क्रिप्ट में दोनों के बीच कोई अंतर नहीं है। इसलिए, आप इस समय जो भी सुविधाजनक है उसका उपयोग कर सकते हैं। उदाहरण के लिए, निम्नलिखित स्ट्रिंग शाब्दिक सभी समान स्ट्रिंग उत्पन्न करते हैं:

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

आंतरिक तारों के लिए एकल उद्धरण और बाहरी के लिए डबल। यह आपको आंतरिक स्थिरांक को उन स्ट्रिंग्स से अलग करने की अनुमति देता है जिन्हें उपयोगकर्ता को प्रदर्शित किया जाना है (या डिस्क आदि पर लिखा गया है)। जाहिर है, आपको अपने कोड में उत्तरार्द्ध डालने से बचना चाहिए, लेकिन ऐसा हमेशा नहीं किया जा सकता है।


8

एक और बात जिसे आप दोहरे कोट्स से सिंगल कोट्स में शिफ्ट करने के कारण के रूप में विचार कर सकते हैं, वह है सर्वर साइड स्क्रिप्ट की लोकप्रियता में वृद्धि। PHP का उपयोग करते समय आप PHP में स्ट्रिंग्स और चर का उपयोग करके चर और पार्स जावास्क्रिप्ट कार्यों को पास कर सकते हैं।

यदि आप एक स्ट्रिंग लिखते हैं और अपने PHP के लिए दोहरे उद्धरण चिह्नों का उपयोग करते हैं, तो आपको किसी भी एकल उद्धरण से बचना नहीं होगा और PHP स्वचालित रूप से आपके लिए चर के मूल्य को पुनः प्राप्त करेगा।

उदाहरण: मुझे अपने सर्वर से एक चर का उपयोग करके एक जावास्क्रिप्ट फ़ंक्शन चलाने की आवश्यकता है।

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

इससे मुझे तार जुड़ने से निपटने में बहुत परेशानी होती है, और मैं प्रभावी रूप से PHP से एक जावास्क्रिप्ट को कॉल कर सकता हूं। यह केवल एक उदाहरण है, लेकिन यह कई कारणों में से एक हो सकता है कि प्रोग्रामर जावास्क्रिप्ट में एकल उद्धरणों के लिए डिफ़ॉल्ट क्यों हैं।

PHP दस्तावेजों से उद्धरण : "डबल-उद्धृत स्ट्रिंग्स की सबसे महत्वपूर्ण विशेषता यह तथ्य है कि चर नामों का विस्तार किया जाएगा। विवरण के लिए स्ट्रिंग पार्सिंग देखें।"


+1, मैं अपने MVC.Net प्रोजेक्ट में ऐसा करता हूं ताकि C # से दोहरे उद्धरण जावास्क्रिप्ट, और इसके विपरीत एकल उद्धरणों में हस्तक्षेप न करें।
DCShannon

3
मुझे लगता है कि यदि आप PHP पेज विधि से अपने पेज पर जावास्क्रिप्ट लिख रहे हैं तो आपको बड़ी समस्या है।
BadHorsie

6

ऐसे लोग हैं जो प्रदर्शन अंतर देखने का दावा करते हैं: पुरानी मेलिंग सूची थ्रेड । लेकिन मैं उनमें से किसी की पुष्टि नहीं कर पाया।

मुख्य बात यह है कि आप अपने स्ट्रिंग के अंदर किस तरह के उद्धरण (डबल या सिंगल) का उपयोग कर रहे हैं। यह बचने की संख्या को कम रखने में मदद करता है। उदाहरण के लिए जब आप अपने स्ट्रिंग्स के अंदर html के साथ काम कर रहे होते हैं, तो एकल उद्धरणों का उपयोग करना आसान होता है ताकि आपको विशेषताओं के आसपास के सभी दोहरे उद्धरणों से बचना न पड़े।


यद्यपि विशेषताएँ एकल उद्धरणों से घिरी हो सकती हैं :)
दामिर ज़ेकिक

आपका अधिकार, मुझे लगा कि xml और xHTML ने दोहरे गुण आस-पास की विशेषताओं को निर्धारित किए हैं, लेकिन एकल उद्धरणों की अनुमति है।
मिचेल ओवरिम

6

मैं दोहरे उद्धरण चिह्नों का उपयोग करता हूं जब एकल उद्धरणों का उपयोग नहीं किया जा सकता है और इसके विपरीत:

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

के बजाय:

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

ओरे "लिली" जैसे एकल उद्धरण और दोहरे उद्धरण वाले एक स्ट्रिंग के बारे में क्या है
sudhAnsu63

6

जावास्क्रिप्ट में एकल और दोहरे उद्धरण चिह्नों में कोई अंतर नहीं है।

विशिष्टता महत्वपूर्ण है:

हो सकता है कि प्रदर्शन भिन्न हों, लेकिन वे बिल्कुल न्यूनतम हैं और ब्राउज़र के कार्यान्वयन के अनुसार हर रोज़ बदल सकते हैं। आगे की चर्चा निरर्थक है जब तक कि आपका जावास्क्रिप्ट एप्लिकेशन सैकड़ों हजारों लंबा नहीं है।

यह एक बेंचमार्क की तरह है अगर

a=b;

से तेज है

a = b;

(अतिरिक्त स्थान)

आज, एक विशेष ब्राउज़र और प्लेटफ़ॉर्म में, आदि।


2
रिक्त स्थान के बिना तेज है। स्ट्रिंग में पार्स करने के लिए कम वर्ण। : p
pilavdzice 21

6

कॉफीस्क्रिप्ट का उपयोग करते समय मैं दोहरे उद्धरण चिह्नों का उपयोग करता हूं। मैं इस बात से सहमत हूं कि आपको दोनों में से किसी एक को चुनना चाहिए। कॉफ़ीस्क्रिप्ट आपको दोहरे उद्धरण चिह्नों का उपयोग करते समय प्रक्षेप देता है।

"This is my #{name}"

ES6 टेम्पलेट स्ट्रिंग्स के लिए बैक टिक्स (`) का उपयोग कर रहा है। जिसका संभवत: एक अच्छा कारण है, लेकिन कोडिंग करते समय इंटरपोलेशन फीचर प्राप्त करने के लिए स्ट्रींग शाब्दिक चरित्र को कोट्स या डबल कोट्स से वापस टिक्सेस में बदलना बोझिल हो सकता है। CoffeeScript सही नहीं हो सकता है, लेकिन हर जगह (डबल कोट्स) एक ही स्ट्रिंग शाब्दिक चरित्र का उपयोग करना और हमेशा प्रक्षेप करने में सक्षम होना एक अच्छी विशेषता है।

`This is my ${name}`

मेरे लिए बैक टिक इस प्रतियोगिता में एक स्पष्ट विजेता है, (लगभग) आम टेक्स्ट स्ट्रिंग्स के अंदर कोई उपस्थिति नहीं है, प्लस वर् इंटरपोलेशन
सिमोन पोगी

5

यदि आप जावास्क्रिप्ट और सी # के बीच आगे पीछे कूद रहे हैं, तो अपनी उंगलियों को सामान्य सम्मेलन के लिए प्रशिक्षित करना सबसे अच्छा है जो दोहरे उद्धरण हैं।


5

मैं निम्नलिखित 20 बार चला रहा हूं। और ऐसा प्रतीत होता है कि दोहरे उद्धरण लगभग 20% तेज हैं।

मज़ेदार हिस्सा है, यदि आप भाग 2 और भाग 1 को चारों ओर बदलते हैं, तो एकल उद्धरण लगभग 20% अधिक तेज़ होते हैं।

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

31
दूसरा तरीका रखो, तुमने पाया है कि बाद में कोड सबसे तेज चलता है। माइक्रो-बेंचमार्क करते समय यह समस्या है। जेएस इंजन के लिए आपको कोड का अनुकूलन करना होगा क्योंकि यह चलता है। (जब JIT काम करता है, तो जावा को बेंचमार्किंग करते समय आपको यही प्रभाव दिखाई देगा।)
डेविड फिलिप्स

4
पहली नई तारीख धीमी है, var dummy_date = new Date()शुरुआत करने के लिए जोड़ें
लॉरी

1
यहां माइक्रो-ऑप्टिमाइज़ेशन का स्तर इतना मूर्खतापूर्ण है कि आप यह भी तर्क दे सकते हैं कि एकल उद्धरण टाइप करने के लिए तेज़ हैं, जिससे तेजी से विकास होता है।
बीजोर

4

कड़ाई से कोई अंतर नहीं है, इसलिए यह ज्यादातर स्वाद की बात है और स्ट्रिंग में क्या है (या यदि जेएस कोड खुद एक स्ट्रिंग में है), तो बचने की संख्या कम रखने के लिए।

गति अंतर किंवदंती PHP दुनिया से आ सकती है, जहां दो उद्धरणों का व्यवहार अलग है।


और रूबी, मैं जोड़ सकता हूं। अजगर का जावास्क्रिप्ट के समान व्यवहार है: एकल / दोहरे उद्धरण चिह्नों के बीच कोई अंतर नहीं है।
दामिर ज़ेकिक

4

सभी उत्तरों को पढ़ने के बाद, जो कहते हैं कि यह तेजी से हो सकता है या शायद फायदे हैं, मैं कहूंगा कि डबल उद्धरण बेहतर है या शायद तेजी से भी हो सकता है क्योंकि Google क्लोजर कंपाइलर एकल उद्धरणों को दोहरे उद्धरण चिह्नों में बदल देते हैं।


क्या आप जानते हैं कि ऐसा क्यों होता है?
ma11hew28

मुझे नहीं पता। शायद यह एक कोडिंग कन्वेंशन है और कुछ खास नहीं है।
मोहसिन

4

अब जब यह 2020 है, तो हमें जावास्क्रिप्ट के लिए एक तीसरे विकल्प पर विचार करना चाहिए: सब कुछ के लिए एकल बैकटिक।

इसे सिंगल या डबल कोट्स के बजाय हर जगह इस्तेमाल किया जा सकता है।

यह आपको सभी चीजों को करने की अनुमति देता है!

  1. इसके अंदर एकल उद्धरण एम्बेड करें: `यह बहुत अच्छा है!`
  2. इसके अंदर दोहरे उद्धरणों को एम्बेड करें: `यह" वास्तव में "महान है!"
  3. स्ट्रिंग प्रक्षेप का उपयोग करें: `यह महान की तुलना में" $ {बेहतर} है। "
  4. यह कई लाइनों की अनुमति देता है: `

    इस

    बनाता है

    जावास्क्रिप्ट

    बेहतर!

    `

अन्य दो को प्रतिस्थापित करते समय यह किसी भी प्रदर्शन हानि का कारण नहीं बनता है: https://medium.com/javascript-in-plain-english/are-backticks-slower-than-other-strings-in-javascript-ce4abf9b9fa


3

यदि आपका JS स्रोत है:

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

HTML स्रोत होगा:

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

या HTML5 के लिए

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

जेएस इस तरह की अनुमति देता है:

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

लेकिन अगर आप इसे कठोर करते हैं, तो यह मज़बूती से कारण के लिए होगा:

JSON=["this","that"]

मुझे यकीन है कि इसमें कुछ समय लगेगा।


3

बस अपने 2 सेंट जोड़ने के लिए: कुछ साल पहले जेएस और पीएचपी दोनों के साथ काम करने में, मैं एकल उद्धरणों का उपयोग करने का आदी हो गया हूं, इसलिए मैं भागने के चरित्र ('\') को टाइप कर सकता हूं, साथ ही साथ इसे भागने के लिए भी। मैंने आमतौर पर इसका उपयोग कच्चे रास्तों को फ़ाइल रास्तों इत्यादि के साथ टाइप करते समय किया था ( http://en.wikipedia.org/wiki/String_literal#Raw_strings )

किसी भी तरह, मेरे सम्मेलन ने पहचानकर्ता-प्रकार के कच्चे तारों पर एकल उद्धरणों का उपयोग करना समाप्त कर दिया, जैसे कि if (typeof s == 'string') ...(जिसमें वर्णों का उपयोग कभी नहीं किया जाएगा - कभी भी), और "हे, व्हाट्स अप?" जैसे पाठों के लिए दोहरे उद्धरण । मैं पहचानकर्ता नामों को दिखाने के लिए एक टंकण सम्मेलन के रूप में टिप्पणियों में एकल उद्धरण का भी उपयोग करता हूं। यह केवल अंगूठे का एक नियम है, और मैं केवल जरूरत पड़ने पर टूट जाता हूं, जैसे कि HTML स्ट्रिंग टाइप करते समय '<a href="#"> like so <a>'(हालांकि आप यहां उद्धरणों को उल्टा कर सकते हैं)। मुझे यह भी पता है कि, JSON के मामले में, नामों के लिए दोहरे उद्धरण चिह्नों का उपयोग किया जाता है - लेकिन इसके बाहर, व्यक्तिगत रूप से, मैं एकल उद्धरणों को पसंद करता हूं जब उद्धरणों के बीच पाठ के लिए भागने की कभी आवश्यकता नहीं होती है - जैसेdocument.createElement('div')

नीचे की रेखा, और जैसा कि कुछ ने उल्लेख किया है / एक गठबंधन, एक सम्मेलन लेने, इसके साथ रहना, और केवल आवश्यक होने पर विचलन करना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.