javascript - والمزدوجة - نشاط علامات الترقيم




متى تستخدم علامات الاقتباس المزدوجة أو المفردة في JavaScript؟ (20)

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

أرى المزيد والمزيد من مكتبات JavaScript هناك باستخدام علامات الاقتباس المفردة عند التعامل مع السلاسل. ما هي أسباب استخدام واحد على الآخر؟ اعتقد انها قابلة للتبادل


دراسة الايجابيات والسلبيات

لصالح اقتباسات واحدة

  • فوضى بصرية أقل.
  • إنشاء 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 () غالبًا ما يكون كافيًا. إذا لم يكن كذلك ، استخدم القوالب.

لصالح علامات الاقتباس المزدوجة

  • من الأسهل اكتشاف الزوجين إذا لم يكن لديك ترميز ألوان. كما هو الحال في سجل وحدة التحكم أو نوع من إعداد عرض المصدر.
  • التشابه مع اللغات الأخرى: في برمجة shell (Bash وما إلى ذلك) ، توجد قيم حرفية فردية ، ولكن لا يتم تفسير حالات الهروب داخلها. يستخدم C و Java علامات تنصيص مزدوجة للسلاسل وعلامات الاقتباس المفردة للأحرف.
  • إذا كنت تريد أن تكون الشفرة صالحة لـ JSON ، فيجب استخدام علامات اقتباس مزدوجة.

لصالح كلاهما

لا يوجد فرق بين الاثنين في JavaScript. لذلك ، يمكنك استخدام كل ما هو مناسب في الوقت الحالي. على سبيل المثال ، ينتج عن القيم الحرفية التالية كل سلسلة نفس:

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

واحد يقتبس عن سلاسل داخلية ومضاعفة للخارجية. يسمح لك ذلك بتمييز الثوابت الداخلية من السلاسل التي سيتم عرضها للمستخدم (أو كتابتها على القرص إلخ). من الواضح أنه يجب تجنب وضع هذا الأخير في شفرتك ، ولكن لا يمكن دائمًا تنفيذه.


ونقلت واحدة

كنت أتمنى أن تكون الاقتباسات المزدوجة هي المعيار ، لأنها تجعل الأمر أكثر منطقية ، لكني أستمر في استخدام الاقتباسات الفردية لأنها تهيمن على المشهد.

ونقلت واحدة:

بدون تفضيل:

التنصيص:


أحد الأسباب (السخيفة) لاستخدام علامات الاقتباس المفردة هو أنها لا تتطلب منك الضغط على مفتاح shift لكتابتها ، في حين أن علامة اقتباس مزدوجة تفعل ذلك. (أفترض أن متوسط ​​السلسلة لا يتطلب الهروب ، وهو افتراض معقول). لنفترض أن كل يوم أقوم بترميز 200 سطر من الكود. ربما في تلك الخطوط 200 لدي 30 اقتباسات. ربما يستغرق كتابة اقتباس مزدوج وقتًا أكبر بمقدار 0.1 ثانية من كتابة اقتباس واحد (لأنني مضطر إلى الضغط على مفتاح shift). ثم في أي يوم ، أضيع 3 ثوان. إذا قمت بالتدوين بهذه الطريقة لمدة 200 يوم في السنة لمدة 40 سنة ، فقد أضعت 6.7 ساعة من حياتي. غذاء الفكر.


أود أن أقول أن الاختلاف هو أسلوب بحت ، لكنني أواجه شكوكي بالفعل. خذ بعين الاعتبار المثال التالي:

/*
   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 و Internet Explorer (تم اختباره في IE7 و IE8) ، سيؤدي هذا إلى إرجاع ما يلي:

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

ومع ذلك ، سوف ينتج Firefox نتيجة مختلفة قليلاً:

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

تم استبدال علامات الاقتباس الفردية بعلامتي اقتباس مزدوجتين. (لاحظ أيضًا كيف تم استبدال مساحة المسافات البادئة بأربع مسافات.) وهذا يعطي الانطباع بأن متصفحًا واحدًا على الأقل يوزع JavaScript داخليًا كما لو كان كل شيء مكتوبًا باستخدام علامات اقتباس مزدوجة. قد يعتقد المرء أن الأمر يستغرق وقتًا أقل لتحليل فايرفوكس إذا كان كل شيء مكتوبًا بالفعل وفقًا لهذا "القياسي".

الذي ، بالمناسبة ، يجعلني باندا حزينة جدا ، لأنني أعتقد أن الاقتباسات المفردة تبدو أجمل بكثير في الكود. بالإضافة إلى ذلك ، في لغات البرمجة الأخرى ، عادة ما تكون أسرع في الاستخدام من علامات الاقتباس المزدوجة ، لذلك سيكون من المنطقي فقط إذا كان الشيء نفسه ينطبق على JavaScript.

الخلاصة: أعتقد أننا بحاجة إلى إجراء المزيد من البحوث حول هذا الموضوع.

تحرير: قد يفسر هذا نتائج اختبار بيتر بول كوخ من عام 2003.

يبدو أن علامات الاقتباس الفردية تكون أحيانًا أسرع في مستكشف Windows (أظهر 1/3 من اختباراتي وقت استجابة أسرع) ، ولكن إذا أظهرت Mozilla فرقًا على الإطلاق ، فإنها تتعامل مع علامات الاقتباس المزدوجة بشكل أسرع قليلاً. لم أجد أي اختلاف على الإطلاق في الأوبرا.

تحرير 2014: الإصدارات الحديثة من Firefox / Spidermonkey لا تفعل ذلك بعد الآن.


إذا كنت تستخدم jshint ، jshint ذلك إلى حدوث خطأ إذا كنت تستخدم سلسلة اقتباس مزدوجة.

اعتدت ذلك من خلال السقالات Yeoman من AngularJS ولكن ربما هناك بطريقة ما مانر لتكوين هذا.

بالمناسبة ، عند التعامل مع HTML إلى JavaScript ، يكون من الأسهل استخدام الاقتباس المفرد:

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

وعلى الأقل ، تستخدم JSON علامات الاقتباس المزدوجة لسلسلة التوزيعات.

لا توجد طريقة بسيطة للإجابة على سؤالك


إذا كنت تفعل جافا سكريبت مضمّنة (يمكن القول بأنه شيء "سيء" ، لكن تجنب تلك المناقشة) فإن علامات الاقتباس المفردة هي خيارك الوحيد لحرفيّات السلسلة ، على ما أعتقد.

على سبيل المثال ، هذا يعمل بشكل جيد:

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

ولكن لا يمكنك لف "hi" في علامات الاقتباس المزدوجة ، عبر أي طريقة هروب أعلم بها. حتى &quot; والتي قد تكون أفضل تخمين (لأنك تهرب من عروض أسعار بقيمة HTML) لا تعمل معي في Firefox. \" لن تعمل إما لأنك في هذه المرحلة تهرب من HTML ، وليس JavaScript.

لذا ، إذا كان اسم اللعبة هو الاتساق ، وكنت ستفعل بعض جافا سكريبت المضمنة في أجزاء من تطبيقك ، فأعتقد أن علامات الاقتباس الفردية هي الفائز. شخص ما يرجى تصحيح لي إذا كنت مخطئا.


انها في الغالب مسألة الاسلوب والتفضيل. هناك بعض الاستكشافات الفنية المثيرة للاهتمام والمفيدة إلى حد ما في الإجابات الأخرى ، لذلك ربما الشيء الوحيد الذي قد أضيفه هو تقديم نصيحة دنيوية صغيرة.

  • إذا كنت ترميز في شركة أو فريق ، فربما تكون فكرة جيدة اتباع "أسلوب المنزل".

  • إذا كنت وحدك مخترقًا لبعض المشروعات الجانبية ، فانتظر بعدد قليل من القادة البارزين في المجتمع. على سبيل المثال ، لنفترض أنك دخلت إلى موقع Node.js. ألقِ نظرة على الوحدات الأساسية ، على سبيل المثال ، underscore.js أو صريحة واطلع على الاتفاقية التي تستخدمها ، وفكّر في اتباعها.

  • إذا تم استخدام كلتا الاتفاقيتين بشكل متساوٍ ، فقم بالتأجيل إلى شخصيتك
    تفضيل.

  • إذا لم يكن لديك تفضيل شخصي ، فقم بنقل عملة معدنية.

  • إذا لم يكن لديك عملة معدنية ، فإن البيرة تكون على لي ؛)


بالحديث عن الأداء ، لن تكون عروض الأسعار عنقتك أبدًا ، ومع ذلك ، فإن الأداء هو نفسه في كلتا الحالتين.

بالحديث عن سرعة الترميز ، إذا كنت تستخدم ' لتحديد سلسلة ، فستحتاج إلى الهروب " علامات الاقتباس. من المرجح أن تحتاج إلى استخدام " داخل السلسلة ، على سبيل المثال:

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

ثم ، أفضِّل استخدام ' لتعيين السلسلة ، لذلك يجب أن أهرب من أحرف أقل.


دعونا ننظر ما يفعله المرجع.

داخل jquery.js ، كل خيط مقتبس.

لذا ، من الآن فصاعدًا ، سأستخدم السلاسل المزدوجة المقتبسة. (كنت أستخدم واحدة!)


شيء آخر قد ترغب في اعتباره سبباً للتحول من علامات الاقتباس المزدوجة إلى علامات الاقتباس المفردة هو الزيادة في شعبية البرامج النصية في جانب الخادم. عند استخدام PHP ، يمكنك تمرير المتغيرات وتحليل وظائف javascript باستخدام السلاسل والمتغيرات في PHP.

إذا قمت بكتابة سلسلة واستخدمت علامات اقتباس مزدوجة ل PHP الخاص بك فلن تضطر إلى الهروب من أي من علامات الاقتباس المفردة و PHP ستقوم تلقائيًا باسترداد قيمة المتغيرات الخاصة بك.

مثال: أحتاج إلى تشغيل وظيفة javascript باستخدام متغير من الخادم الخاص بي.

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

هذا يوفر لي الكثير من المتاعب في الاضطرار إلى التعامل مع سلاسل ، ويمكنني أن أتصل بفاعلية javascript من PHP. هذا مثال واحد فقط ، ولكن قد يكون هذا أحد الأسباب العديدة التي تجعل المبرمجين يتخلفون عن استخدام علامات الاقتباس الفردية في جافا سكريبت.

اقتباس من وثائق PHP : "إن أهم ميزة في السلاسل المزدوجة المشار إليها هي حقيقة أنه سيتم توسيع أسماء المتغيرات. انظر تحليل الخلافات للحصول على التفاصيل."


من الناحية الفنية ، لا يوجد فرق ، إنها مسألة أسلوب وعقد فقط.

يوصي دوغلاس كروكفورد باستخدام علامات الاقتباس المفردة للأوتار الداخلية والاقتباسات المزدوجة للخارج (يعني من خلال الخارج تلك التي سيتم عرضها لمستخدم التطبيق ، مثل الرسائل أو التنبيهات).

أنا شخصيا اتبع ذلك.

حدث: يبدو أن السيد كروكفورد crockford وينصح الآن باستخدام علامات الاقتباس المزدوجة في جميع أنحاء :)


يتم توضيح الفرق الوحيد في ما يلي:

'A string that\'s single quoted'

"A string that's double quoted"

لذا ، لا يرجع الأمر إلا إلى مقدار الاقتباس الذي تريد فعله. من الواضح أن الأمر نفسه ينطبق على علامات الاقتباس المزدوجة في السلاسل المزدوجة التي يتم اقتباسها.


لا يوجد حل واحد أفضل . ومع ذلك ، أود أن أزعم أن علامات الاقتباس المزدوجة قد تكون مرغوبة أكثر في بعض الأحيان:

  • سيكون القادمون الجدد بالفعل على دراية بالاقتباسات المزدوجة من لغتهم . في اللغة الإنجليزية ، يجب أن نستخدم الاقتباس المزدوج " لتحديد ممر النص المقتبس. إذا كنا سنستخدم اقتباسًا منفردًا ' ، فقد يفسر القارئ تفسيره على أنه انكماش. أما المعنى الآخر لمرور النص المحاط بـ ' يشير إلى المعنى "العامية" ، من المنطقي أن تبقى متسقة مع اللغات الموجودة من قبل ، وهذا من المرجح أن يخفف من تعلم وتفسير الشفرة.
  • الاقتباسات المزدوجة تقضي على الحاجة للهروب من الفترات العليا (كما في التقلصات). خذ بعين الاعتبار السلسلة: "I'm going to the mall" ، مقابل النسخة التي تم الإفلات منها: 'I\'m going to the mall' .
  • يقتبس مزدوج يعني سلسلة في العديد من اللغات الأخرى . عندما تتعلم لغة جديدة مثل Java أو C ، يتم دائمًا استخدام علامات اقتباس مزدوجة. في روبي ، PHP و Perl ، تشير السلاسل المقتبسة الوحيدة إلى عدم وجود تخطى للشرطة المائلة بينما تدعمها علامات الاقتباس المزدوجة.

  • تدوين JSON مكتوب بعلامات اقتباس مزدوجة.

ومع ذلك ، كما ذكر آخرون ، من المهم للغاية أن تظل متماسكة.


After reading all the answers that say it maybe be faster or maybe have advantages, I would say double quote is better or maybe faster too because Google closure compiler convert single quotes to double quotes.


I've been running the following about 20 times. And it appears that double quotes are about 20% faster.

The fun part is, if you change part 2 and part 1 around, single quotes are about 20% faster.

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

If you're jumping back an forth between JavaScript and C#, it's best to train your fingers for the common convention which is double quotes.


Just to add my 2 cents: In working with both JS and PHP a few years back, I've become accustom to using single quotes so I can type the escape character ('\') without having to escape it as well. I usually used it when typing raw strings with file paths, etc. ( http://en.wikipedia.org/wiki/String_literal#Raw_strings )

Anyhow, my convention ended up becoming the use of single quotes on identifier-type raw strings, such as if (typeof s == 'string') ... (in which escape characters would never be used - ever), and double quotes for texts , such as "Hey, what's up?". I also use single quotes in comments as a typographical convention to show identifier names. This is just a rule of thumb, and I break off only when needed, such as when typing HTML strings '<a href="#"> like so <a>' (though you could reverse the quotes here also). I'm also aware that, in the case of JSON, double quotes are used for the names - but outside that, personally, I prefer the single quotes when escaping is never required for the text between the quotes - like document.createElement('div') .

خلاصة القول ، وكما ذكر البعض / ألمح إليها ، اختر اتفاقية ، والتزم بها ، ولا تحيد عنها إلا عند الضرورة.


There are people that claim to see performance differences: old mailing list thread . But I couldn't find any of them to be confirmed.

The main thing is to look at what kind of quotes (double or single) you are using inside your string. It helps to keep the number of escapes low. For instance when you are working with html inside your strings, it is easier to use single quotes so that you don't have to escape all double quotes around the attributes.


There is strictly no difference, so it is mostly a matter of taste and of what is in the string (or if the JS code itself is in a string), to keep number of escapes low.

The speed difference legend might come from PHP world, where the two quotes have different behavior.


When using CoffeeScript I use double quotes. I agree that you should pick either one and stick to it. CoffeeScript gives you interpolation when using the double quotes.

"This is my #{name}"

ES6 is using back ticks (`) for template strings. Which probably has a good reason, but when coding it can be cumbersome to change the string literals character from quotes or double quotes to back ticks in order to get the interpolation feature. CoffeeScript might not be perfect, but using the same string literals character everywhere (double quotes) and always be able to interpolate is a nice feature.

`This is my ${name}`




conventions