Можно ли использовать одинарные и двойные кавычки в строковых литералах 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?
Удалить первый символ строки, если он равен 0