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

1783

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

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

  • 110
    что легче читать? alert («Время игры»); или оповещение («Это игровое время»);
  • 553
    Как насчет этого Райана? alert("It's \"game\" time."); или alert('It\'s "game" time.'); ?
Показать ещё 18 комментариев
Теги:
string
conventions

40 ответов

1050
Лучший ответ

Наиболее вероятной причиной использования 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`);

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

  • 75
    Важный момент, который следует отметить со всеми соглашениями о коде - определите его один раз и придерживайтесь его. IOW, не используйте двойные кавычки где-нибудь и одинарные кавычки в другом месте.
  • 158
    @Cerebrus - я думаю, что гибкость в порядке с этим. Конечно, выберите предпочтительный стиль, но если вам нужно оторваться от стиля, чтобы сохранить множество кавычек в одной строке. Я был бы в порядке с этим.
Показать ещё 16 комментариев
542

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

  • 5
    Это очень актуально при работе с вызовом jQuery.ajax в службу ASP.NET (веб-служба, метод страницы или MVC).
  • 96
    Имена свойств в строках JSON должны быть заключены в двойные кавычки, но вся строка JSON может быть заключена в одинарные кавычки: var jsonString = '{"key1":"value1"}'; (Не то, чтобы я рекомендовал собирать JSON вручную.)
Показать ещё 14 комментариев
236

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

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

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

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

  • 0
    Ваше первое замечание по английскому языку не всегда верно и может меняться в зависимости от соглашения о местности / доме. Печатные материалы обычно используют одинарные кавычки для речи и используют другое форматирование для больших блоков цитируемого текста. Ваше «разговорное» значение не является полезным определением кавычек для акцента. Плюс английские пользователи вообще очень бедны с кавычками и апострофами.
  • 1
    @JohnFerguson, только по этой причине может быть желательно использовать двойные кавычки, чтобы провести это различие (между апострофами и цитируемыми отрывками).
Показать ещё 12 комментариев
112

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

'A string that\ single quoted'

"A string that double quoted"

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

  • 26
    Как вы можете быть уверены, что это единственная разница?
  • 1
    Гарет делает хорошую мысль. Я не думал об этом
Показать ещё 8 комментариев
66

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

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

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

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

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

  • 5
    Крокфорд теперь предпочитает двойные кавычки.
  • 0
    Спасибо, обновлено.
Показать ещё 10 комментариев
54

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

/*
   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 больше не делают этого.

  • 25
    Если в одном браузере немного быстрее сделать это одним способом, а в другом - немного быстрее, то кажется, что единственное руководство, которое мы можем извлечь из этого, это то, что мы должны делать все, что нам больше нравится, потому что это причинит кому-то боль. пользователи и помогают другим, и количество различий, вероятно, будет незаметным. «Преждевременная оптимизация ...» и все такое.
  • 0
    Дело в том, что это может быть немного быстрее в одном браузере (Firefox), в то время как в других браузерах производительность не пострадает.
Показать ещё 17 комментариев
30

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

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

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

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

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

  • 8
    Договорились о том, что это, возможно, плохо, но если это необходимо, я уверен, что можно использовать кодировку в стиле URL, например <a onclick="alert(%22hi%22);">hi</a> - из памяти, это работает, хотя вместо этого он мог быть указан в атрибуте href <a href="javascript:alert(%22hi%22);">hi</a>
  • 18
    <a onclick='alert("hi");'>hi</a> тоже законно ...
Показать ещё 9 комментариев
28

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

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

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

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

  • 12
    Дуглас Крокфорд против JQuery. Выбрать свой яд.
  • 0
    В чем причина Крокфорда?
Показать ещё 2 комментария
23

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

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

  • Стиль дома: некоторые группы разработчиков уже используют одно соглашение или другое.
  • Клиентские требования: будете ли вы использовать кавычки в строках? (См. Ответ Ady).
  • Язык на стороне сервера: люди VB.Net могут использовать одиночные кавычки для java- script, так что скрипты могут быть построены на стороне сервера (VB.Net использует двойные кавычки для строк, поэтому java- script строки легко различимы, если они используют одинарные кавычки).
  • Код библиотеки. Если вы используете библиотеку, использующую определенный стиль, вы можете использовать тот же стиль самостоятельно.
  • Личные предпочтения: вы можете отличить один или другой стиль.
  • 0
    Неверно, ' равно 00100111 в двоичном формате, а " равно 00100010 в двоичном. Таким образом, двойные кавычки потребляют вдвое меньше энергии для хранения, чем одинарные кавычки. В этом разница.
18

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

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

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

  • 10
    Почему за это проголосовали. Это вопрос стиля, и лучший стиль - быть последовательным и следовать тем, кто был до вас.
  • 1
    +1 Документация по jQuery API тоже. Это была единственная причина, по которой я согласился на двойные кавычки. Лично я думаю, что ответы, что «все сводится к личным предпочтениям», немного ошибочны - лучше всего найти широко используемое соглашение и придерживаться его. И так как я могу хотеть копировать и вставлять примеры из jQuery (прямо или косвенно), я не хочу каждый раз заменять кавычки.
Показать ещё 3 комментария
13

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

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

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

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

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

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

13

Надеюсь, я не добавляю ничего очевидного, но я боролся с 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. Это может спасти пару проблем отладки...

  • 1
    Я столкнулся с подобной проблемой с интерполяцией строк ES6 (обратные метки). Моя система сборки скомпилировала его в строку с двойными кавычками, которая сломала заголовок Auth, который работал с одинарными кавычками!
12

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

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

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

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

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

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

  • 4
    Вы можете настроить jshint для принятия либо.
  • 0
    Изменилась ли реализация jshint? поскольку демонстрационный веб-сайт, кажется, принимает либо без выдачи каких-либо предупреждений / ошибок, и я не могу найти какие-либо варианты, чтобы ограничить использование jshint либо. Возможно, этот ответ устарел или неточен?
12

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

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

  • 13
    Дело не в том, что раньше все делалось одним способом, а теперь - другим. Различные языки обрабатывают кавычки по-разному, а некоторые работают так, как вы описываете. Но это вопрос JavaScript . Одиночные и двойные кавычки обрабатываются одинаково в JavaScript (за исключением того, что в строке можно использовать кавычки другого типа без экранирования). Речь не идет о двойных кавычках, допускающих управляющие символы или интерполяцию строк. JavaScript не работает так. Управляющие символы и escape-последовательности работают в зависимости от того, какой тип цитаты вы используете.
  • 0
    Как бывший программист Perl, я продолжаю думать об этом, хотя знаю, что это не имеет отношения к JS.
10

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

"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

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

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

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

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

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

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

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

В пользу как

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

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

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

9

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

  • 1
    Полагаю, вы здесь имеете в виду только английскую раскладку клавиатуры ... У меня немецкая, мне нужно нажать shift для обоих. Во всяком случае, я не понимаю, почему нажатие клавиши Shift добавляет время к процессу. Я нажимаю клавишу shift левой рукой и нажимаю клавишу кавычки правой. Это происходит одновременно, для меня нет разницы.
  • 1
    @codewandler Все еще стоит нажимать клавишу Shift, даже если вы можете нажать ее параллельно клавише ". Это заставляет вас отодвинуть палец от положения по умолчанию. Например, предположим, что вы печатаете: var description = "This is a \"quick\" test"; на английской клавиатуре. Для английской клавиатуры ваш мизинец должен двигаться от левой клавиши Shift к клавише Q в верхнем ряду, а не от клавиши A на клавишу Q. Другими словами, она должна проходить вдвое больше. Я не уверен, где находятся клавиши на немецкой клавиатуре, но я уверен, что есть аналогичный пример.
Показать ещё 2 комментария
8

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

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

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

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

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

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

  • 0
    +1, я делаю это в своем проекте MVC.Net, чтобы двойные кавычки из C # не мешали одинарным кавычкам из javascript, и наоборот.
  • 2
    Я думаю, что если вы пишете JavaScript на свою страницу из метода класса PHP, у вас есть большие проблемы.
6

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

"This is my #{name}"

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

`This is my ${name}`
  • 0
    Для меня обратный тик является явным победителем в этом конкурсе, (почти) нет присутствия внутри общих текстовых строк, плюс var интерполяция
6

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

Важно:

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

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

a=b;

быстрее, чем

a = b;

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

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

  • 2
    без пробелов быстрее. меньше символов для разбора в строке. :п
6

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

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

Вместо:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
  • 0
    Как насчет строки, содержащей как одинарные, так и двойные кавычки, такие как O'realy?
6

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

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

  • 0
    Хотя атрибуты также могут быть заключены в одинарные кавычки :)
  • 0
    Ваше право, я думал, что xml и xhtml предписывают двойные кавычки, окружающие атрибуты, но одинарные кавычки разрешены.
5

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

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));
  • 30
    Иными словами, вы обнаружили, что более поздний код работает быстрее всего. Это проблема при выполнении микро-тестов. Вы должны учитывать движок JS, оптимизирующий код во время его работы. (Вы увидите тот же эффект при тестировании Java из-за того, как работает JIT.)
  • 4
    первая новая дата медленная, добавьте var dummy_date = new Date() в начало
Показать ещё 1 комментарий
4

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

  • 0
    Вы знаете, почему это происходит?
  • 0
    Я не знаю. Может быть, это соглашение о кодировании и ничего особенного.
3

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

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

3

Просто добавьте свои 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

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

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

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

  • 0
    И Руби, я могу добавить. Python ведет себя так же, как JavaScript: разницы между одинарными / двойными кавычками нет.
2

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

  • 0
    Нет практической разницы? Ты можешь доказать это?
  • 6
    Бремя доказывания лежит на парне, утверждающем, что в отличие от языка есть разница.
Показать ещё 2 комментария
1

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

echo "$xyz";

в php, оценивается $xyz, который НЕ является тем, что я хочу. поэтому я всегда использую "вместо", когда речь заходит о веб-разработке, поэтому я гарантирую хотя бы последовательность строк, когда речь идет о php/jscript.

к сожалению, это невозможно сделать в java или объекте c, где '' означает char и "" обозначает строку. но это еще один вопрос.

1

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

Я предпочитаю ' просто потому, что вам не нужно это делать!

Кроме этого вы можете избежать ' внутри одинарных кавычек с обратным слэшем \'

console.log('Don\'t lose time'); // "Don't lose time"

1

Для меня, если я код в редакторе VIM и если что-то заключено в одинарные кавычки, я могу дважды щелкнуть, чтобы выбрать ТОЛЬКО текст внутри кавычек. С другой стороны, двойные кавычки содержат кавычки, которые я нахожу раздражающими, когда я хочу сделать быструю копию и вставку.

например. "myVar" дважды щелкните в копиях редактора VIM: > myVar < "myVar" буквально копирует: > "myVar" < и когда я вставляю, мне нужно удалить кавычки с обеих сторон.

Мои два цента в любом случае...

  • 1
    Это настраивается в большинстве терминалов (например, gnome-Terminal: Edit-> Profile-> General-> Select-by-word символы) и в gVim ( superuser.com/a/387060/33415 ).
1

Я думаю, что важно не забывать, что, хотя IE может иметь 0 расширений/панелей инструментов, firefox может иметь некоторые расширения (я просто думаю о Firebug, например). Эти расширения окажут влияние на результат теста.

Не то, чтобы это действительно имело значение, поскольку браузер X быстрее запускает elementstyles, в то время как браузер Y может быть быстрее в создании элемента canvas. (следовательно, почему "производитель" браузера всегда имеет самый быстрый механизм javascript)

0

Если вы используете PHP для генерации кода JavaScript, вы должны использовать следующее объявление.

let value = "<?php echo 'This is my message, "double quoted" - \'single quoted\' ?>";

Выход будет:

This is my message, "double quoted" - 'single quoted'

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

var value = 'This is my message';
document.getElementById('sample-text').innerHTML = value;
<span id="sample-text"></span>
0

Я думаю, что это все зависит от удобства/предпочтения.

Я предпочитаю двойную цитату, потому что она соответствует тому, что имеет С#, и эта среда, в которой я обычно работаю: С# + JS.

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

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

0

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

  • 0
    Не уверен насчет последней части. Если будут приняты надлежащие меры для экранирования строки для предотвращения внедрения SQL (угроза безопасности), я думаю, что любая цитата является приемлемой. Символы не должны передаваться дословно.
0

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

  • Некоторые эффективные алгоритмы используют массивы символов для обработки строк. Эти алгоритмы (компилятор браузера и т.д.) Сначала увидели бы " (# 34), прежде чем ' (# 39) сохранили бы несколько циклов процессора в зависимости от вашей структуры данных.
  • " выполняется с помощью анти-XSS-движков
  • 1
    (1) звучит как чистое предположение. Эффективный токенизатор не будет использовать тупой, if 0x30 ... else if 0x31 ... else if ... структура. Компилятор переведет переключатель в сбалансированное дерево ветвей (так сложно сказать, что дешевле, если оно вообще есть) или таблицу переходов (так что все они стоят одинаково). И есть более странные способы, например, хитрые трюки, чтобы отыскать символ в целом слове сразу. В любом случае, это было бы пренебрежимо мало, и это не то, что нужно учитывать при принятии решения о том, как написать свой код .
  • 0
    спекуляция в лучшем случае. Я попытался найти это и зашел в тупик. Было бы интересно посмотреть, где этот алгоритм ссылается
Показать ещё 1 комментарий
-3

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

Двойные кавычки поддерживают многострочные строки.

  • 0
    Двойные кавычки не поддерживают многострочные строки в JavaScript.
  • 0
    они делают, если вы ставите обратную косую черту в каждом eol
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню