Когда нужно использовать двойные или одинарные кавычки в JavaScript?

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

Я вижу все больше и больше библиотек JavaScript, используя одиночные кавычки при обработке строк. Каковы причины использования одного над другим? Я думал, что они очень взаимозаменяемы.

1699
задан aemkei 28 окт. '08 в 13:34
источник поделиться
40 ответов
  • 1
  • 2

Наиболее вероятной причиной использования single vs double в разных библиотеках является предпочтение программиста и/или согласованность API.

Помимо согласованности, используйте, что лучше всего подходит для строки:.

Использование другого типа цитаты в качестве литерала:

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

... но это может усложниться...

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

Другой вариант, новый в ES6, литералы шаблона, которые используют символ back-tick:

alert(`Use "double" and 'single' quotes in the same string`);
alert(`The escape the \` back-tick character in a string`);

Литералы шаблонов предлагают чистый синтаксис для: интерполяции переменных, многострочных строк и т.д.

1050
ответ дан Ady 28 окт. '08 в 13:40
источник поделиться

Если вы имеете дело с JSON, следует отметить, что строго говоря, строки JSON должны быть двойными. Конечно, многие библиотеки поддерживают одинарные кавычки, но у меня были большие проблемы в одном из моих проектов, прежде чем понять, что одинарная цитата строки на самом деле не соответствует стандартам JSON.

570
ответ дан Arne 06 янв. '11 в 10:59
источник поделиться

Нет лучшего решения; однако я хотел бы утверждать, что двойные кавычки могут быть более желательными время от времени:

  • Новички уже знакомы с двойными кавычками с их языка. На английском языке мы должны использовать двойные кавычки ", чтобы идентифицировать прохождение цитируемого текста. Если бы мы использовали одну цитату ', читатель мог бы неправильно интерпретировать ее как сокращение. Другой смысл прохода текста, окруженного ', указывает на "разговорное" значение. Имеет смысл оставаться в соответствии с ранее существовавшими языками, и это, вероятно, облегчит обучение и интерпретацию кода.
  • Двойные кавычки устраняют необходимость избегать апострофов (как в сжатии). Рассмотрим строку: "I'm going to the mall", в противном случае экранированная версия: 'I\'m going to the mall'.
  • Двойные кавычки означают строку во многих других языках. Когда вы изучаете новый язык, такой как Java или C, всегда используются двойные кавычки. В Ruby, PHP и Perl строки с одним кавычком подразумевают отсутствие обратных слэшей, а двойные кавычки поддерживают их.

  • Обозначение JSON записывается с двойными кавычками.

Тем не менее, как утверждали другие, наиболее важно оставаться последовательным.

248
ответ дан user1429980 04 авг. '13 в 11:36
источник поделиться

Разница только демонстрируется в следующем:

'A string that\ single quoted'

"A string that double quoted"

Итак, это зависит только от того, сколько котировок вы хотите сделать. Очевидно, что то же самое относится к двойным кавычкам в двойных кавычках.

112
ответ дан Gareth 28 окт. '08 в 23:56
источник поделиться

Одиночные кавычки

Я бы хотел, чтобы двойные кавычки были стандартными, потому что они имеют немного больше смысла, но я продолжаю использовать одинарные кавычки, потому что они доминируют над сценой.

Одиночные кавычки:

Нет предпочтений:

Двойные кавычки:

69
ответ дан Olegs Jeremejevs 07 авг. '15 в 20:28
источник поделиться

Я бы хотел сказать, что разница стилистична, но я действительно сомневаюсь. Рассмотрим следующий пример:

/*
   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 внутри, как будто все было написано с использованием двойных кавычек. Можно подумать, что Firefox меньше времени для разбора JavaScript, если все уже написано в соответствии с этим стандартом.

Что, кстати, делает меня очень печальным panda, так как я думаю, что одинарные кавычки выглядят намного лучше в коде. Кроме того, на других языках программирования они обычно быстрее используются, чем двойные кавычки, поэтому было бы разумно, если бы то же самое применимо к JavaScript.

Заключение: Я думаю, нам нужно сделать больше исследований по этому вопросу.

Изменить: Это может объяснить результаты теста Peter-Paul Koch еще в 2003 году.

Кажется, что одиночные кавычки иногда бывают быстрее в Windows Explorer (примерно 1/3 моих тестов показывали более быстрое время отклика), но если Mozilla показывает разницу вообще, она обрабатывает двойные кавычки немного быстрее. В Opera нет никакой разницы.

Изменить 2014: Современные версии Firefox/Spidermonkey больше не делают этого.

54
ответ дан Mathias Bynens 02 мая '09 в 10:48
источник поделиться

Если вы делаете встроенный JavaScript (возможно, "плохой", но избегаете этого обсуждения), я считаю, что кавычки одиночные - это ваш единственный вариант для строковых литералов.

например, это отлично работает:

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

Но вы не можете обернуть "привет" в двойные кавычки, используя любой способ экранирования, о котором я знаю. Даже &quot;, который был бы моим лучшим предположением (поскольку вы избегаете кавычек в значении атрибута HTML), не работает для меня в Firefox. \" не будет работать, потому что на данный момент вы ускользаете для HTML, а не для JavaScript.

Итак, если имя игры согласовано, и вы собираетесь сделать некоторые встроенные JavaScript в части вашего приложения, я думаю, что одинарные кавычки являются победителями. Кто-то, пожалуйста, поправьте меня, если я ошибаюсь.

30
ответ дан Tom Lianza 24 июля '09 в 21:50
источник поделиться

Технически нет никакой разницы, это только вопрос стиля и условности.

Дуглас Крокфорд рекомендует использовать одинарные кавычки для внутренних строк и двойные кавычки для внешних (по внешнему мы подразумеваем те, которые будут отображаться для пользователя приложения, например, сообщения или предупреждения).

Я лично следую этому.

ОБНОВЛЕНИЕ: Похоже, что г-н Крокфорд изменил свое мнение и теперь рекомендует использовать двойные кавычки:)

29
ответ дан Mariusz Nowak 03 мая '12 в 0:11
источник поделиться

Строго говоря, нет разницы в значении; поэтому выбор подходит для удобства.

Вот несколько факторов, которые могут повлиять на ваш выбор:

  • Стиль дома: некоторые группы разработчиков уже используют одно соглашение или другое.
  • Клиентские требования: будете ли вы использовать кавычки в строках? (См. Ответ Ady).
  • Язык на стороне сервера: люди VB.Net могут использовать одиночные кавычки для java- script, так что скрипты могут быть построены на стороне сервера (VB.Net использует двойные кавычки для строк, поэтому java- script строки легко различимы, если они используют одинарные кавычки).
  • Код библиотеки. Если вы используете библиотеку, использующую определенный стиль, вы можете использовать тот же стиль самостоятельно.
  • Личные предпочтения: вы можете отличить один или другой стиль.
24
ответ дан Kramii 28 окт. '08 в 18:15
источник поделиться

Посмотрите, что делает ссылка.

Внутри jquery.js каждая строка имеет двойные кавычки.

Итак, теперь я буду использовать строки с двумя кавычками. (Я использовал сингл!)

18
ответ дан Frederic 24 июля '12 в 18:16
источник поделиться

В основном это вопрос стиля и предпочтения. В других ответах есть несколько интересных и полезных технических исследований, поэтому, возможно, единственное, что я могу добавить, это предложить немного мирских советов.

  • Если вы кодируете в компании или команде, то, вероятно, это хорошая идея следуйте "стилю дома".

  • Если вы один взломали несколько побочных проектов, посмотрите на несколько видных лидеров сообщества. Например, скажем, вы попадаете в Node.js. Взгляните на основные модули, например, underscore.js или express, и посмотрите, что которые они используют, и подумайте над этим.

  • Если оба соглашения используются одинаково, то отложите их на свой личный предпочтение.

  • Если у вас нет личных предпочтений, переверните монету.

  • Если у вас нет монеты, тогда пиво на мне;)

13
ответ дан cavalcade 21 мая '12 в 0:48
источник поделиться

Надеюсь, я не добавляю ничего очевидного, но я боролся с Django и Ajax и JSON.

Предполагая, что в вашем коде HTML вы используете двойные кавычки, как обычно должно быть, я настоятельно рекомендую использовать одинарные кавычки для остальных в JavaScript.

Итак, я согласен с @ady, но с некоторой осторожностью.

Моя нижняя строка: В JavaScript, вероятно, это не имеет значения, но как только вы вставляете внутри HTML или тому подобное вы начинаете беспокоиться. Ты должен знать что фактически ускользает, читает, передает вашу строку.

Мой простой случай:

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

Вы можете определить\"в третьем поле showThis.

Двойная цитата не срабатывала!

Понятно, почему, но также понятно, почему мы должны придерживаться одинарных кавычек... .. Я думаю..

Этот случай представляет собой очень простое вложение HTML, возникла ошибка простой копией/вставкой из кода с двойным кавычками JavaScript.

Итак, чтобы ответить на вопрос:

Попробуйте использовать одинарные кавычки в HTML. Это может спасти пару проблем отладки...

13
ответ дан mariotti 07 мая '12 в 22:25
источник поделиться

Не уверен, что это актуально в сегодняшнем мире, но двойные кавычки, которые использовались для контента, который должен был обрабатывать управляющие символы, и одинарные кавычки для строк, которые этого не сделали.

Компилятор будет запускать манипуляции с строками в строке с двойными кавычками, оставив одну строку с кавычками буквально нетронутой. Это использовало для того, чтобы "хорошие" разработчики решили использовать одинарные кавычки для строк, которые не содержали контрольные символы, такие как \n или \0 (не обрабатывались в одинарных кавычках) и двойные кавычки, когда они нуждались в анализируемой строке (при небольшая стоимость циклов процессора для обработки строки).

12
ответ дан garysb 01 нояб. '12 в 6:49
источник поделиться

Если вы используете jshint, это приведет к возникновению ошибки, если вы используете двойную кавычку.

Я использовал его через Yeoman scafflholding AngularJS, но, возможно, есть способ настройки этого.

Кстати, когда вы обрабатываете HTML в JavaScript, проще использовать одиночную кавычку:

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

И, по крайней мере, JSON использует двойные кавычки для строк-повторов.

Нет никакого тривиального способа ответить на ваш вопрос

12
ответ дан MetallimaX 27 февр. '14 в 18:20
источник поделиться

Просто следите за тем, что вы используете. Но не снижайте уровень комфорта.

"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

Использование синтаксиса литералов шаблона.

`Be "my" guest. You're in complete freedom.`; // most comfort :D
10
ответ дан abhisekp 08 сент. '15 в 19:37
источник поделиться

Говоря о производительности, котировки никогда не станут вашим узким местом, однако в обоих случаях производительность одинакова.

Говоря о скорости кодирования, если вы используете ' для разграничения строки, вам нужно избежать кавычек ". Вы, скорее всего, должны будете использовать " внутри строки, например:

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

Затем я предпочитаю использовать ' для разграничения строки, поэтому мне нужно избежать меньшего количества символов.

10
ответ дан Juan Carlos 19 нояб. '13 в 18:20
источник поделиться

Изучение плюсов и минусов

В пользу одинарных кавычек

  • Меньше визуального беспорядка.
  • Генерация 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() достаточно часто. Если нет, используйте шаблоны.

В пользу двойных кавычек

  • Парные пары легче определить, если у вас нет цветового кодирования. Как в консольном журнале, так и в какой-то форме источника.
  • Сходство с другими языками: в программировании оболочки (Bash и т.д.) существуют строковые литералы с одной кавычкой, но escape-коды не интерпретируются внутри них. C и Java используют двойные кавычки для строк и одинарные кавычки для символов.
  • Если вы хотите, чтобы код был действительным JSON, вам нужно использовать двойные кавычки.

В пользу как

В JavaScript нет никакой разницы. Поэтому вы можете использовать то, что сейчас удобно. Например, следующие строковые литералы производят одну и ту же строку:

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

Одиночные кавычки для внутренних строк и двойные для внешних. Это позволяет вам отличать внутренние константы от строк, которые должны отображаться пользователю (или записываться на диск и т.д.). Очевидно, что вам следует избегать размещения последнего в вашем коде, но это всегда можно сделать.

9
ответ дан Divyesh Kanzariya 08 марта '16 в 17:51
источник поделиться

Одна (глупая) причина использовать одинарные кавычки будет заключаться в том, что они не требуют, чтобы вы нажали клавишу shift, чтобы ввести их, тогда как двойная цитата. (Я предполагаю, что средняя строка не требует экранирования, что является разумным предположением.) Теперь давайте предположим, что каждый день я кодирую 200 строк кода. Возможно, в этих 200 строках у меня есть 30 цитат. Возможно, набрав двойную кавычку, нужно на 0,1 секунды больше времени, чем набирать одну цитату (потому что мне нужно нажать клавишу shift). Затем в любой день я теряю 3 секунды. Если я закоучу таким образом 200 дней в году в течение 40 лет, я потратил 6,7 часа на мою жизнь. Пища для размышлений.

9
ответ дан John Kurlak 22 нояб. '13 в 6:59
источник поделиться

Еще одна вещь, которую вы можете рассматривать как причину перехода от двойных кавычек к одинарным кавычкам, - это увеличение популярности серверных сценариев. При использовании PHP вы можете передавать переменные и анализировать функции javascript, используя строки и переменные в PHP.

Если вы пишете строку и используете двойные кавычки для своего PHP, вам не придется скрывать ни одну из одинарных кавычек, и PHP автоматически получит значение переменных для вас.

Пример: Мне нужно запустить функцию javascript, используя переменную с моего сервера.

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

Это избавляет меня от хлопот, связанных с подключением строк, и я могу эффективно вызывать javascript из PHP. Это только один пример, но это может быть одной из нескольких причин, по которым программисты не выполняют одиночные кавычки в javascript.

Цитата из документов PHP: "Самая важная особенность строк с двумя кавычками - это то, что имена переменных будут расширены. Подробнее см. в разделе" Разбор строк".

8
ответ дан Dodzi Dzakuma 12 апр. '12 в 4:20
источник поделиться

В JavaScript нет разницы между одиночными и двойными кавычками.

Важно:

Возможно, существуют различия в производительности, но они абсолютно минимальны и могут ежедневно меняться в соответствии с реализацией браузеров. Дальнейшее обсуждение бесполезно, если ваше приложение JavaScript не содержит сотни тысяч.

Это как тест, если

a=b;

быстрее, чем

a = b;

(дополнительные пробелы)

сегодня, в определенном браузере и платформе и т.д.

6
ответ дан mauro 26 июля '09 в 13:40
источник поделиться

Есть люди, которые утверждают, что имеют разницу в производительности: старая нить списка рассылки. Но я не мог найти ни одного из них для подтверждения.

Главное - посмотреть, какие цитаты (двойные или одиночные) вы используете внутри своей строки. Это помогает снизить количество побегов. Например, когда вы работаете с html внутри своих строк, проще использовать одинарные кавычки, чтобы вам не приходилось избегать всех двойных кавычек вокруг атрибутов.

6
ответ дан Michiel Overeem 28 окт. '08 в 13:43
источник поделиться

Я бы использовал двойные кавычки, когда одинарные кавычки не могут быть использованы и наоборот:

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

Вместо:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
6
ответ дан Gumbo 24 июля '09 в 21:55
источник поделиться

При использовании CoffeeScript я использую двойные кавычки. Я согласен, что вы должны выбрать один и придерживаться его. CoffeeScript дает вам интерполяцию при использовании двойных кавычек.

"This is my #{name}"

ES6 использует обратные тики (`) для строк шаблонов. Вероятно, это имеет вескую причину, но при кодировании это может быть громоздким для изменения символа строковых литералов из кавычек или двойных кавычек для обратных тиков, чтобы получить функцию интерполяции. CoffeeScript может быть не идеальным, но использование одного и того же символа строковых литералов везде (двойные кавычки) и всегда быть способным к интерполяции - хорошая функция.

`This is my ${name}`
6
ответ дан GijsjanB 11 февр. '15 в 12:28
источник поделиться

Если вы прыгаете вперед между JavaScript и С#, лучше всего тренировать пальцы для общего соглашения, которое является двойным кавычками.

5
ответ дан moomoo 21 июля '13 в 9:58
источник поделиться

У меня было около 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));
5
ответ дан Bastiaan Linders 29 апр. '10 в 18:30
источник поделиться

После прочтения всех ответов, которые говорят, что это может быть быстрее или, возможно, иметь преимущества, я бы сказал, что двойная цитата лучше или, может быть, быстрее, потому что компилятор Google закрытия конвертировать одинарные кавычки в двойные кавычки.

4
ответ дан Mohsen 18 сент. '11 в 8:22
источник поделиться

Просто добавьте свои 2 цента: несколько лет назад я работал с JS и PHP, я привык к использованию одинарных кавычек, поэтому я могу ввести escape-символ ('\'), не избегая его, Я обычно использовал его при вводе необработанных строк с путями файлов и т.д. (http://en.wikipedia.org/wiki/String_literal#Raw_strings)

Во всяком случае, мое соглашение закончилось тем, что стало использовать одинарные кавычки в сырых строках типа идентификатора, например if (typeof s == 'string') ... (в которых escape-символы никогда не использовались никогда) и двойные кавычки для текстов, такие как "Эй, что?". Я также использую одинарные кавычки в комментариях как типографское соглашение для отображения имен идентификаторов. Это просто эмпирическое правило, и я отключаюсь только тогда, когда это необходимо, например, при вводе строк HTML '<a href="#"> like so <a>' (хотя вы также можете отменить цитаты). Я также знаю, что в случае JSON для имен используются двойные кавычки, но за пределами этого лично я предпочитаю одиночные кавычки, когда экранирование никогда не требуется для текста между кавычками - например, document.createElement('div').

Нижняя строка, и, как некоторые из них упомянули/ссылались на нее, выбирали конвенцию, придерживались ее и только отклонялись при необходимости.

3
ответ дан James Wilkins 12 июня '14 в 22:47
источник поделиться

Если ваш источник JS:

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

Источник HTML:

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

или для HTML5

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

JS допускает такие массивы:

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

Но если вы его укоротите, это будет по разумной причине:

JSON=["this","that"]

Я уверен, что это занимает некоторое время.

3
ответ дан B.F. 05 июня '14 в 10:06
источник поделиться

Вы можете использовать одинарные кавычки или двойные кавычки. Это позволяет вам, например, легко вставлять javascript внутри атрибутов HTML, без необходимости избегать кавычек. То же самое, когда вы создаете javascript с PHP.

Общая идея: если можно использовать такие кавычки, которые вам не нужно бежать. Меньше экранирования = лучший код.

3
ответ дан JJTalik 10 сент. '14 в 20:11
источник поделиться

Нет никакой разницы, поэтому в основном это вопрос вкуса и того, что находится в строке (или если сам код JS находится в строке), чтобы сохранить количество побегов на низком уровне.

Легенда о разнице скоростей может появиться из мира PHP, где две кавычки имеют другое поведение.

3
ответ дан PhiLho 28 окт. '08 в 15:49
источник поделиться
  • 1
  • 2

Другие вопросы по меткам