Когда использовать двойные или одинарные кавычки в JavaScript? - PullRequest
1834 голосов
/ 28 октября 2008

console.log("double"); против console.log('single');

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

Ответы [ 41 ]

1137 голосов
/ 28 октября 2008

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

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

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

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

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

595 голосов
/ 06 января 2011

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

303 голосов
/ 04 августа 2013

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

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

  • Запись в формате JSON пишется в двойных кавычках.

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

115 голосов
/ 28 октября 2008

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

'A string that\'s single quoted'

"A string that's double quoted"

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

83 голосов
/ 07 августа 2015

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

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

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

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

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

56 голосов
/ 02 мая 2009

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

/*
   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, если все уже написано в соответствии с этим «стандартом».

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

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

Редактировать: Это может объяснить Результаты теста Петра-Пола Коха , полученные в 2003 году.

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

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

31 голосов
/ 24 июля 2009

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

Например, это прекрасно работает:

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

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

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

29 голосов
/ 03 мая 2012

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

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

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

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

25 голосов
/ 28 октября 2008

Строго говоря, нет никакой разницы в значении; так что выбор сводится к удобству.

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

  • Домашний стиль: некоторые группы разработчиков уже используют одно или другое соглашение.
  • Требования на стороне клиента: Будете ли вы использовать кавычки в строках? (См. Ответ Ади).
  • Язык на стороне сервера: люди VB.Net могут выбрать использование одинарных кавычек для java-скрипта, чтобы скрипты могли быть построены на стороне сервера (VB.Net использует двойные кавычки для строк, поэтому легко отличить, если они используют одинарные кавычки).
  • Код библиотеки: если вы используете библиотеку, которая использует определенный стиль, вы можете рассмотреть возможность использования того же стиля самостоятельно.
  • Личные предпочтения: вам может показаться, что тот или иной стиль выглядит лучше.
17 голосов
/ 24 июля 2012

Давайте посмотрим, что делает ссылка.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...