Можно ли использовать одинарные и двойные кавычки в строковых литералах JavaScript взаимозаменяемо?
Рассмотрим следующие две альтернативы:
console.log("double");
console.log('single');
В первом примере используются двойные кавычки вокруг строки, тогда как во втором – одинарные кавычки.
Я замечаю, что все больше и больше библиотек JavaScript используют одинарные кавычки для работы со строками.
Являются ли эти два варианта взаимозаменяемыми? Если нет, есть ли преимущества использования одного из них по сравнению с другим?
5 ответ(ов)
Если вы работаете с JSON, стоит отметить, что, строго говоря, строки в JSON должны быть заключены в двойные кавычки. Конечно, многие библиотеки поддерживают одинарные кавычки, но у меня были серьезные проблемы в одном из моих проектов, прежде чем я осознал, что использование одинарных кавычек для строк на самом деле не соответствует стандартам JSON.
Нет единственного лучшего решения; однако, я хотел бы утверждать, что использование двойных кавычек может быть более предпочтительным в некоторых случаях:
- Новички уже знакомы с двойными кавычками из своего языка. В английском языке мы используем двойные кавычки
"
для обозначения цитируемого текста. Если использовать одинарные кавычки'
, читатель может неправильно интерпретировать это как сокращение. Другое значение текста, заключенного в'
, указывает на разговорное значение. Имеет смысл оставаться последовательными с уже существующими языками, и это может облегчить изучение и понимание кода. - Двойные кавычки устраняют необходимость экранирования апострофов (например, в сокращениях). Рассмотрим строку:
"I'm going to the mall"
против экранированной версии:'I\'m going to the mall'
. - Двойные кавычки обозначают строку во множестве других языков. При изучении нового языка, такого как Java или C, всегда используются двойные кавычки. В C одинарные кавычки зарезервированы для чего-то другого (
char
). В Ruby, PHP и Perl строки в одинарных кавычках не поддерживают экранирование с помощью обратных слешей, в то время как двойные кавычки это делают. - JSON-нотация написана с использованием двойных кавычек.
Тем не менее, как уже отмечали другие, самое важное — оставаться последовательным.
Вам стоит поддерживать последовательность в том, что вы используете, но не стоит жертвовать своим уровнем комфорта.
"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
В современном мире это правило может не так актуально, но традиционно двойные кавычки использовались для строк, в которых необходимо обработать управляющие символы, в то время как одинарные кавычки применялись для строк, не содержащих таких символов.
Компилятор выполняет манипуляции со строками, заключенными в двойные кавычки, в то время как строки в одинарных кавычках остаются нетронутыми. Это приводило к тому, что "хорошие" разработчики выбирали одинарные кавычки для строк, не содержащих управляющих символов, таких как \n
или \0
(которые не обрабатываются внутри одинарных кавычек), а двойные кавычки использовали, когда требовалась интерпретация строки (с небольшими затратами на обработку со стороны процессора).
Таким образом, это деление может помочь лучше понять, какой тип кавычек использовать в зависимости от ситуации.
На самом деле, нет никакой разницы между одинарными и двойными кавычками в JavaScript.
Важна спецификация:
Возможно, существуют различия в производительности, но они минимальны и могут измениться в любой момент в зависимости от реализации браузеров. Дальнейшие обсуждения по этому вопросу бесполезны, если ваше JavaScript-приложение не имеет сотен тысяч строк кода.
Это похоже на сравнение:
a=b;
и
a = b;
(с лишними пробелами) — может быть, сегодня, в конкретном браузере и на определенной платформе, это окажется иначе.
Как присвоить многострочную строку переменной?
Преобразование объекта JS в строку JSON
Преобразование объекта в строку
Как преобразовать строку, разделённую запятыми, в массив?
Как узнать, содержится ли определенная строка в массиве на JavaScript/jQuery?