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

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

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

30 ответов


наиболее вероятной причиной использования single vs double в разных библиотеках является предпочтение программиста и / или согласованность 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 in a string`);

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


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


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

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

  • JSON нотация пишется с двойными кавычками.

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


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

'A string that\'s single quoted'

"A string that's double quoted"

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


Одинарные Кавычки

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

один цитаты:

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

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


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

/*
   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.

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

Edit: это может объяснить результаты теста Питера-Пола Коха из еще в 2003 году.

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

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


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

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

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

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

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


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

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

Я лично следовал.

UPDATE: похоже, что г-н Крокфорд передумали и теперь рекомендует использовать двойные кавычки на протяжении :)


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

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

  • тип дома: некоторые группы разработчиков уже используют одно соглашение или другой.
  • требования на стороне клиента: будете ли вы использовать кавычки в строках? (См. ответ Ади).
  • серверный язык: VB.Net люди могут использовать одинарные кавычки для java-скрипта, поэтому что скрипты могут быть построены на стороне сервера (VB.Net использует двойные кавычки для строк, поэтому строки java-скрипта легко отличить, если они используют одинарные кавычки).
  • код библиотеки: если вы используете библиотеку, которая использует определенный стиль, вы можете использовать тот же стиль самостоятельно.
  • личные предпочтения: вы могли бы вещь тот или иной стиль выглядит лучше.

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

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

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


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

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

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

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

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

  • если у тебя нет монеты,затем пиво за мой счет;)


надеюсь, я не добавляю что-то очевидное, но я боролся с Джанго и 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, ошибка была сгенерирована простым копированием / вставкой из ' double цитируемый код JavaScript.

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

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


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

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


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

я использовал его через леса Йомена AngularJS, но, возможно, есть как-то maner, чтобы настроить это.

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

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

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

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


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

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

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

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


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

"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

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


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

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

  • меньше визуальных помех.
  • создание 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 () достаточно часто. Если нет, используйте шаблоны.

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

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

в пользу обоих

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

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

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


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

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

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

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

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

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


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

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

вместо:

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

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

спецификация-это важно:

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

Это как ориентир если

a=b;

быстрее

a = b;

(доп. пробелы)

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


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

"This is my #{name}"

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

`This is my ${name}`

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

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


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


Я выполнял следующее Около 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));

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


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

легенда о разнице в скорости может исходить из мира PHP, где две цитаты имеют разное поведение.


если ваш источник 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>

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

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

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

JSON=["this","that"]

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


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

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

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


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

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