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

вопрос создан в Tue, Feb 9, 2016 12:00 AM

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

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

    
1846
  1. что легче читать? alert («Время игры»); или оповещение («Время игры»);
    2011-06-09 16: 10: 55Z
  2. Как насчет этого Райана? alert("It's \"game\" time."); или alert('It\'s "game" time.');?
    2011-10-11 18: 37: 01Z
  3. Если всегда используются одинарные кавычки и иногда двойные кавычки, где литерал содержит одинарную кавычку, то нам придется печатать гораздо меньше кнопок Shift, а левый мизинец даст нам благословения , Но да, как сказал @arne, для JSON следует использовать двойные кавычки.
    2011-10-31 15: 46: 42Z
  4. Одиночные кавычки легче выполнять, когда вы используете европейскую клавиатуру (двойная кавычка - это Shift + 2, которая не так приятна, как удобное нажатие одной клавиши на клавиатуре. правый мизинец).
    2012-04-25 20: 46: 59Z
  5. @ Arne Нет такой вещи, как "европейская клавиатура". Например. немецкая клавиатура требует сдвига для обоих типов кавычек. (Но одинарные кавычки проще.)
    2012-06-18 15: 53: 19Z
30 ответов                              30                         

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

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

    
1148
2019-03-26 22: 14: 26Z
  1. Важный момент, который следует отметить со всеми соглашениями кода - определите его один раз и придерживайтесь его. IOW, не используйте двойные кавычки где-нибудь и одинарные кавычки в другом месте.
    2009-05-02 08: 03: 53Z
  2. @ Cerebrus - я думаю, что с этим все в порядке. Конечно, выберите предпочтительный стиль, но если вам нужно оторваться от стиля, чтобы сохранить множество кавычек в одной строке. Я был бы в порядке с этим.
    2009-05-02 08: 11: 03Z
  3. @ Матиас Биненс: Вы не можете доказать несуществование чего-либо. Докажите, что является преимуществом перед любым из них, это путь. ;)
    2010-01-11 23: 16: 20Z
  4. jsfiddle.net/5HhWF/1 Я не вижу разницы в скорости (хром)
    2010-12-27 00: 26: 54Z
  5. @ Паскаль Я думаю, он шутил. И это было смешно.
    2012-04-12 19: 47: 15Z

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

    
596
2011-01-06 07: 59: 46Z
  1. Это очень важно при работе с вызовом jQuery.ajax в службу ASP.NET (веб-служба, метод страницы или MVC).
    2011-03-03 11: 46: 19Z
  2. Имена свойств в строках JSON должны быть в двойных кавычках, но строка JSON в целом может быть в одинарных кавычках: var jsonString = '{"key1":"value1"}'; ( Не то чтобы я рекомендовал собирать JSON вручную.)
    2012-02-09 10: 45: 04Z
  3. Вы не должны писать JSON вручную, если можете .stringify() it.
    2013-02-03 02: 09: 14Z
  4. Это право - лучший аргумент для использования двойных кавычек. JSON должен иметь двойные кавычки. Другие ответы в основном дают советы «быть последовательными», что означает, что если какая-либо часть языка может реально вызвать двойную кавычку, вы должны последовательно использовать эту двойную кавычку.
    2014-07-14 16: 07: 14Z
  5. Это также актуально при работе с несколькими языками, где почти во всех других языках (Java, C, C ++, ...) используются двойные кавычки для строк и одинарные кавычки для символов , Я предпочитаю использовать одинаковые цитаты по всем направлениям, поэтому придерживайтесь двойных кавычек для JS. При многолетнем сенсорном наборе дополнительная клавиша для сдвига для двойных кавычек совершенно неактуальна, и если ваше кодирование ограничено вашим набором текста, вам нужно попрактиковаться в правильном наборе.
    2014-09-24 17: 17: 49Z

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

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

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

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

    
306
2018-03-12 12: 13: 22Z
  1. Ваше первое замечание об английском языке не всегда верно и может меняться в зависимости от соглашения с местностью /домом. Печатные материалы обычно используют одиночные кавычки для речи и используют другое форматирование для больших блоков цитируемого текста. Ваше «разговорное» значение не является полезным определениемион цитат для акцента. Кроме того, английские пользователи вообще очень бедны кавычками и апострофами.
    2015-01-22 13: 24: 41Z
  2. @ JohnFerguson, по одной этой причине может быть желательно использовать двойные кавычки, чтобы провести это различие (между апострофами и процитированными отрывками).
    2015-01-22 17: 24: 30Z
  3. Раньше я поддерживал одинарные кавычки, и это могло убедить меня использовать двойные кавычки для моего следующего проекта ...
    2015-02-23 07: 45: 11Z
  4. Я все о прагматизме. Из-за того, что 1 из 100 строк, которые я печатаю или использую, имеет двойные кавычки, а многие, многие другие имеют апострофы, я использую двойные. Однако в конце дня вы должны использовать тип цитаты, который 1) уже используется в проекте, если вы являетесь новым разработчиком проекта, или 2) использовать тот, который, по вашему мнению, имеет больше смысла.
    2015-11-16 17: 43: 16Z
  5. Показательный пример - то, что я только что напечатал (есть несколько апострофов, двойных кавычек нет;)
    2015-11-16 17: 44: 15Z

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

'A string that\'s single quoted'

"A string that's double quoted"

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

    
116
2015-06-10 08: 08: 24Z
  1. Как вы можете быть уверены, что это единственное отличие?
    2009-05-02 07: 49: 44Z
  2. Гарет делает хорошее замечание. Я не думал об этом
    2009-05-02 07: 55: 59Z
  3. @ Mathias - раздел 7.8.4 спецификации [ ecma-international.org/publications/standards/Ecma-262.htm] описывает буквальное обозначение строки, единственное отличие состоит в том, что DoubleStringCharacter является« SourceCharacter, но не quote ", а SingleStringCharacter - это" SourceCharacter, но не одиночная кавычка "
    2009-05-02 10: 14: 31Z
  4. @ Mathias - Хорошо, я понимаю вашу точку зрения, и хотя мне бы очень хотелось думать, что программы JavaScript оптимизированы до такой степени, что это дает ощутимую разницу (и даже тогда , это оставлено на усмотрение конкретного переводчика), я просто немного циничен в этом.
    2009-05-03 10: 22: 38Z
  5. А как насчет "{\"name\": \"Peter\"}" против '{"name": "Peter"}'? По общему признанию, вы могли бы сказать, что это та же самая разница, но это, несомненно, повлияет на ваше решение не так, как в примере выше.
    2015-06-16 20: 55: 58Z

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

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

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

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

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

83
2017-05-23 10: 31: 39Z
  1. Крокфорд теперь предпочитает двойные кавычки.
    2016-09-29 05: 16: 23Z
  2. Google теперь предпочитает двойные кавычки
    2017-01-12 18: 19: 50Z
  3. airbnb теперь предпочитает двойные кавычки
    2017-01-12 18: 21: 06Z
  4. @ SurajJain Источник? Airbnb и Руководства по стилю Google по-прежнему перечисляются как отдельные.
    2017-01-12 20: 37: 18Z
  5. @ SurajJain А, это конфиг проверки стиля кода, написанный на JSON, который вообще не допускает одинарные кавычки. Чтение их - хороший способ сравнить выбор, сделанный различными проектами.
    2017-01-13 09: 38: 52Z

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

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

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

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

  

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

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

    
56
2014-01-14 20: 29: 39Z
  1. Если в одном браузере сделать это немного быстрее, а в другом - немного быстрее, то это единственное руководство, от которого мы можем отказаться это то, что мы должны делать все, что нам больше нравится, потому что это будет вредить некоторым пользователям и помогать другим, а разница, вероятно, будет незаметной. «Преждевременная оптимизация ...» и все такое.
    2009-05-03 06: 26: 24Z
  2. Извините, мой комментарий не был более конструктивным. Я только говорю, что то, как браузер выбирает отображение своего внутреннего представления синтаксиса, вероятно, имеет очень мало общего с тем, как он анализируется, и поэтому, вероятно, не является причиной для предпочтения одного типа кавычек над другим. С другой стороны, данные о производительности, сравнивающие время разбора одинарных и двойных кавычек в разных браузерах, были бы более убедительными.
    2012-01-14 05: 44: 09Z
  3. Это потрясающий ответ, отрыв от остальных, которые просто щебечут: «Они такие же, они одинаковые» ... Вы сказали, что «Кроме того, в других языках программирования они обычно используются быстрее, чем двойные кавычки» , можно спросить, на каких языках? Я использовал обычные языки, такие как Java и C #, никогда не видел ни одного, кроме JS, который принимает строковые литералы в одинарных кавычках. Вложения с одинарными кавычками обычно используются только для символьных констант (допускается только один символ).
    2012-11-27 07: 03: 17Z
  4. AFAIK это было исправлено в Firefox 17, Firefox раньше делал декомпиляцию при выполнении .toString, но теперь он возвращает оригинальную копию. Современный Firefox не будет иметь этой проблемы.
    2014-03-13 10: 14: 18Z
  5. Не знаю о различиях в скорости. Но я хотел бы отметить, что «создается впечатление, что по крайней мере один браузер внутренне анализирует JavaScript, как будто все написано с использованием двойных кавычек». ерунда Разбирается так, как будто написано в двойных кавычках. То есть он превратил свое внутреннее представление (которое просто хранит строку, а не кавычки) в читаемую человеком версию, для которой случается использовать один набор кавычек. Во всяком случае, похоже, что это изменилось, согласно комментарию Бенджамина.
    2014-10-11 08: 00: 13Z

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

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

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

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

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

    
31
2011-09-28 02: 41: 52Z
  1. Договорились о том, что это, возможно, плохо, однако, если это необходимо сделать, я уверен, что можно использовать кодировку в стиле URL, например, <a onclick="alert(%22hi%22);">hi</a> - из памяти это работает, хотя это могло быть в атрибуте href, а не <a href="javascript:alert(%22hi%22);">hi</a>
    2009-12-16 10: 33: 08Z
  2. <a onclick='alert("hi");'>hi</a> тоже допустимо ...
    2011-05-13 12: 19: 56Z
  3. <a onclick="alert(&quot;hi&quot;)"> работает для меня ..
    2011-07-03 23: 06: 50Z
  4. @ Том Лианза, конечно, alert(&quot;hi&quot;) не является допустимым JavaScript. Но значения атрибутов закодированы. w3.org/TR/html4/intro/sgmltut.html# didx-атрибут
    2011-07-22 19: 33: 40Z
  5. Здесь вы можете договориться с @Robert. &quot; - это правильный способ избежать двойной кавычки внутри атрибута HTML. Он отлично работает в Firefox. @Denilson, XML (и, следовательно, XHTML) допускает как одинарные, так и двойные кавычки. См. Литерал AttValue в спецификации XML по адресу w3.org/TR/REC-xml/# d0e888 .
    2012-01-10 13: 06: 11Z

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

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

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

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

    
29
2016-08-31 13: 17: 43Z
  1. Дуглас Крокфорд против JQuery. Выбери свой яд.
    2012-09-28 01: 33: 24Z
  2. Как Крокфорд объяснил это?
    2015-08-02 13: 09: 37Z
  3. Это соглашение, которому я следую. Это больше личных предпочтений. Мне нравится использовать строки в одинарных кавычках для внутренних вещей, таких как селекторы jQuery и /или такие вещи, как getElementById ('id'); мне просто нравится, как это выглядит в одинарных кавычках. Но переключитесь на двойные кавычки для внешнего текста, так как он часто может содержать внутренние кавычки в тексте. Кроме того, он позволяет легко находить и различать внешние и внутренние строки, если вы пытаетесь найти ошибку в одной или другой.
    2015-08-27 13: 19: 34Z
  4. По состоянию на апрель 2016 года Дуглас Крокфорд теперь рекомендует использовать только двойные кавычки, учитывая, что на практике многие разработчики сочли внутреннюю и внешнюю дихотомию трудной для использования.
    2016-08-30 20: 27: 43Z

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

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

  • Домашний стиль: некоторые группы разработчиков уже используют одно или другое соглашение.
  • Требования на стороне клиента. Будете ли вы использовать кавычки в строках? (См. Ответ Ади).
  • Язык на стороне сервера: пользователи VB.Net могут выбрать использование одинарных кавычек для java-сценария, чтобы сценарии могли быть построены на стороне сервера (VB.Net использует двойные кавычки для строк, поэтому строки java-script легко отличить, если они используют одинарные кавычки).
  • Код библиотеки. Если вы используете библиотеку, которая использует определенный стиль, вы можете рассмотреть возможность использования того же стиля самостоятельно.
  • Личные предпочтения. Вы можете выбрать один или другой стиль.
25
2008-10-28 15: 15: 07Z
  1. Не соответствует действительности, ' - это 00100111 в двоичном, а " - это 00100010 в двоичном. Таким образом, двойные кавычки занимают вдвое меньше энергии для хранения в виде одинарных кавычек.
    2017-05-22 21: 59: 32Z

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

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

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

        
    17
    2012-07-24 15: 16: 11Z
    1. Почему за это проголосовали. Это вопрос стиля, и лучший стиль - быть последовательным и следовать тем, кто был до вас.
      2012-09-28 01: 32: 58Z
    2. + 1 документация по jQuery API тоже подходит , Это была единственная причина, по которой я согласился на двойные кавычки. Лично я думаю, что ответы, что «все сводится к личным предпочтениям», немного ошибочны - лучше всего найти широко используемое соглашение и придерживаться его. И поскольку я могу захотеть копировать и вставлять примеры из jQuery (прямо или косвенно), мне не нужно каждый раз заменять кавычки.
      2014-02-14 11: 53: 01Z
    3. Возможно, jQuery не смог последовать за людьми до них (или на самом деле это не волновало, как большинство других экспертов). ;)
      2014-06-10 21: 18: 16Z
    4. Но Angular .... (шучу: P)
      2014-10-17 13: 38: 47Z
    5. если не серьезно,
      2016-10-10 06: 55: 04Z

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

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

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

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

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

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

    14
    2013-04-01 22: 17: 58Z

    Я надеюсь, что не добавляю что-то очевидное, но я боролся с 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
    2015-11-22 03: 04: 47Z
    1. Я столкнулся с аналогичной проблемой с интерполяцией строк ES6 (обратные ссылки). Моя система сборки скомпилировала его в строку в двойных кавычках, которая сломала заголовок Auth, который работал с одинарными кавычками!
      2016-02-12 03: 07: 28Z

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

    "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
    
        
    13
    2017-01-05 05: 56: 07Z

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

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

        
    12
    2013-06-08 03: 54: 32Z
    1. Дело не в том, что раньше все делалось одним способом, а теперь - другим. Различные языки обрабатывают кавычки по-разному, а некоторые работают так, как вы описываете. Но это вопрос JavaScript . Одинарные и двойные кавычки обрабатываются одинаково в JavaScript (за исключением того, что в строке можно использовать кавычки другого типа без экранирования). Нет вопроса о двойных кавычках, допускающих управляющие символы или интерполяцию строк. JavaScript не работает так. Управляющие символы и escape-последовательности работают в зависимости от того, какой тип цитаты вы используете.
      2014-03-15 23: 58: 28Z
    2. Как бывший программист на Perl, я продолжаю думать об этом, хотя знаю, что это не имеет отношения к JS.
      2014-12-31 16: 23: 58Z

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

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

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

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

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

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

        
    12
    2014-02-27 15: 26: 24Z
    1. Вы можете настроить jshint для принятия любого из них.
      2014-05-23 22: 16: 27Z
    2. Изменилась ли реализация jshint? так как демонстрационный сайт, кажется, принимает либо без выдачи каких-либо предупреждений /ошибок, и я не могу найти какие-либо варианты, чтобы ограничить использование jshint либо. Возможно, этот ответ устарел или неточен?
      2015-11-13 09:44: 49Z

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

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

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

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

        
    10
    2013-11-19 15: 20: 05Z

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

        
    9
    2013-11-22 03: 59: 33Z
    1. Полагаю, вы здесь имеете в виду только английскую раскладку клавиатуры ... У меня немецкая, мне нужно нажать shift для обоих. Во всяком случае, я не понимаю, почему нажатие клавиши Shift добавляет время к процессу. Я нажимаю клавишу shift левой рукой и нажимаю клавишу кавычки правой. Это происходит одновременно, для меня нет разницы.
      2015-10-16 09: 23: 27Z
    2. @ codewandler Все еще существует необходимость в нажатии клавиши Shift, даже если вы можете нажать ее параллельно клавише ". Это заставляет вас отодвинуть палец" из положения по умолчанию. Например, предположим, что вы набираете: var description = "This is a \"quick\" test"; на английской клавиатуре. Для английской клавиатуры ваш мизинец должен двигаться от левой клавиши Shift к клавише Q в верхнем ряду, а не от A ключ к клавише Q. Другими словами, он должен проходить вдвое больше. Я не уверен, где находятся клавиши на немецкой клавиатуре, но я уверен, что есть аналогичный пример.
      2015-10-16 16: 55: 46Z
    3. @ codewandler Кроме того, необходимость набирать shift, даже если я могу сделать это параллельно, не позволяет левому пальцу мизинца подготовиться к вводу следующего символа после " во что бы вы ни печатали.
      2015-10-16 16: 58: 26Z
    4. Идея «тратить время» немного глупа, но идея меньшей эргономичности (особенно в эпоху синдрома карпелевого туннеля и т. д.) делает ее приятной выиграть, особенно в тех случаях, когда это не имеет значения. Учитывая более 1000 строк кода в день, это может сэкономить сотни ежедневных изгибов мизинца.
      2018-06-13 18: 24: 48Z
      

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

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

    • Менее визуальный беспорядок.
    • Генерация 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 и т. д.) строковые литералы в одинарных кавычках существуют, но экранирование не интерпретируется внутри них. C и Java используют двойные кавычки для строк и одинарные кавычки для символов.
    • Если вы хотите, чтобы код был действительным JSON, вам нужно использовать двойные кавычки.

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

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

    р>

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

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

        
    9
    2016-03-08 14: 51: 54Z

    Еще одна вещь, которую вы могли бы рассмотреть в качестве причины перехода от двойных к одиночным кавычкам, - это рост популярности серверных сценариев. При использовании 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
    2012-04-12 01: 20: 53Z
    1. + 1, я делаю это в своем проекте MVC.Net, чтобы двойные кавычки из C # не мешали одинарным кавычкам из javascript, и наоборот .
      2015-03-12 01: 31: 33Z
    2. Я думаю, что если вы пишете JavaScript на свою страницу из метода класса PHP, у вас есть большие проблемы.
      2015-08-02 13: 08: 39Z

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

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

    Вместо:

    '\'' + singleQuotedValue + '\''
    "\"" + doubleQuotedValue + "\""
    
        
    6
    2009-07-24 18: 55: 51Z
    1. А как насчет строки, содержащей как одинарные, так и двойные кавычки, например, O'rea? lly
      2013-06-27 07: 21: 39Z

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

    Спецификация важна:

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

    Это похоже на тест, если

    a=b;
    

    быстрее чем

    a = b;
    

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

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

    6
    2015-11-21 23: 10: 20Z
    1. быстрее без пробелов. меньше символов для разбора в строке. : Р
      2012-05-02 21: 50: 54Z

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

    "This is my #{name}"
    

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

    `This is my ${name}`
    
        
    6
    2016-02-07 16: 52: 10Z
    1. Для меня обратный тик является явным победителем в этом конкурсе, (почти) нет присутствия внутри общих текстовых строк, плюс интерполяция var
      2016-07-27 08: 15: 43Z

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

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

        
    5
    2008-10-28 10: 43: 19Z
    1. Хотя атрибуты также могут быть заключены в одинарные кавычки:)
      2008-10-28 15: 16: 56Z
    2. Ваше право, я думал, что xml и xhtml предписывают двойные кавычки, окружающие атрибуты, но одинарные кавычки разрешены.
      2008-10-29 18: 15: 06Z

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

        
    5
    2013-07-21 06: 58: 28Z

    Я выполнял следующее примерно 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
    2015-11-21 23: 11: 15Z
    1. Другими словами, вы обнаружили, что более поздний код выполняется быстрее всего. Это проблема при выполнении микро-тестов. Вы должны учитывать движок JS, оптимизирующий код во время его работы. (Вы увидите тот же эффект при тестировании Java из-за того, как работает JIT.)
      2011-01-03 06: 46: 08Z
    2. первая новая дата медленная, добавьте var dummy_date = new Date() к началу
      2012-10-22 10: 31: 16Z
    3. Уровень микрооптимизации здесь настолько глуп, что можно также утверждать, что одинарные кавычки быстрее набираются, что приводит к более быстрой разработке.
      2018-06-13 18: 28: 32Z

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

        
    4
    2011-09-18 05: 22: 02Z
    1. Знаете ли вы, почему это происходит?
      2012-09-16 18: 09: 04Z
    2. Я не знаю. Может быть, это соглашение о кодировании и ничего особенного.
      2012-09-17 03: 19: 27Z

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

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

        
    3
    2008-10-28 12: 49: 22Z
    1. И Руби, я могу добавить. Python ведет себя так же, как и JavaScript: разницы между одинарными /двойными кавычками не делается.
      2008-10-28 15: 19: 15Z

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

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

    JSON=["this","that"]
    

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

        
    3
    2014-06-05 07: 06: 12Z

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

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

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

        
    3
    2014-06-12 19: 47: 04Z

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

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

        
    3
    2014-09-10 17: 11: 01Z
источник размещен Вот