23

Можно ли использовать одинарные и двойные кавычки в строковых литералах JavaScript взаимозаменяемо?

16

Рассмотрим следующие две альтернативы:

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

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

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

Являются ли эти два варианта взаимозаменяемыми? Если нет, есть ли преимущества использования одного из них по сравнению с другим?

5 ответ(ов)

6

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

4

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

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

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

0

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

"This is my string."; // :-|
"I'm invincible."; // Удобно :)
'You can\'t beat me.'; // Неудобно :(
'Oh! Yes. I can "beat" you.'; // Удобно :)
"Do you really think, you can \"beat\" me?"; // Неудобно :(
"You're my guest. I can \"beat\" you."; // Иногда это необходимо :P
'You\'re my guest too. I can "beat" you too.'; // Иногда это необходимо :P

Обновление ECMAScript 6

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

`Be "my" guest. You're in complete freedom.`; // Максимальный комфорт :D
0

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

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

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

0

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

Важна спецификация:

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

Это похоже на сравнение:

a=b;

и

a = b;

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь