console.log("double");
vs console.log('single');
Я вижу все больше и больше библиотек JavaScript, используя одиночные кавычки при обработке строк. Каковы причины использования одного над другим? Я думал, что они очень взаимозаменяемы.
console.log("double");
vs console.log('single');
Я вижу все больше и больше библиотек JavaScript, используя одиночные кавычки при обработке строк. Каковы причины использования одного над другим? Я думал, что они очень взаимозаменяемы.
Наиболее вероятной причиной использования одинарного или двойного в разных библиотеках является предпочтение программиста и/или согласованность 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('Escape the \' back-tick character and the \${ dollar-brace sequence in a string');
Шаблонные литералы предлагают чистый синтаксис для: интерполяции переменных, многострочных строк и многого другого.
Если вы имеете дело с JSON, следует отметить, что строго говоря, строки JSON должны быть двойными. Конечно, многие библиотеки поддерживают одинарные кавычки, но у меня были большие проблемы в одном из моих проектов, прежде чем понять, что одинарная цитата строки на самом деле не соответствует стандартам JSON.
Нет лучшего решения; однако я хотел бы утверждать, что двойные кавычки могут быть более желательными время от времени:
"
, чтобы идентифицировать прохождение цитируемого текста. Если бы мы использовали одну цитату '
, читатель мог бы неправильно интерпретировать ее как сокращение. Другой смысл прохода текста, окруженного '
, указывает на "разговорное" значение. Имеет смысл оставаться в соответствии с ранее существовавшими языками, и это, вероятно, облегчит обучение и интерпретацию кода."I'm going to the mall"
, в противном случае экранированная версия: 'I\'m going to the mall'
.Двойные кавычки означают строку во многих других языках. Когда вы изучаете новый язык, такой как Java или C, всегда используются двойные кавычки. В Ruby, PHP и Perl строки с одним кавычком подразумевают отсутствие обратных слэшей, а двойные кавычки поддерживают их.
Обозначение JSON записывается с двойными кавычками.
Тем не менее, как утверждали другие, наиболее важно оставаться последовательным.
Разница только демонстрируется в следующем:
'A string that\ single quoted'
"A string that double quoted"
Итак, это зависит только от того, сколько котировок вы хотите сделать. Очевидно, что то же самое относится к двойным кавычкам в двойных кавычках.
Я бы хотел, чтобы двойные кавычки были стандартными, потому что они имеют немного больше смысла, но я продолжаю использовать одинарные кавычки, потому что они доминируют над сценой.
Одиночные кавычки:
Нет предпочтений:
Двойные кавычки:
Я бы хотел сказать, что разница стилистична, но я действительно сомневаюсь. Рассмотрим следующий пример:
/*
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 больше не делают этого.
Если вы делаете встроенный JavaScript (возможно, "плохой", но избегаете этого обсуждения), я считаю, что кавычки одиночные - это ваш единственный вариант для строковых литералов.
например, это отлично работает:
<a onclick="alert('hi');">hi</a>
Но вы не можете обернуть "привет" в двойные кавычки, используя любой способ экранирования, о котором я знаю. Даже "
, который был бы моим лучшим предположением (поскольку вы избегаете кавычек в значении атрибута HTML), не работает для меня в Firefox. \"
не будет работать, потому что на данный момент вы ускользаете для HTML, а не для JavaScript.
Итак, если имя игры согласовано, и вы собираетесь сделать некоторые встроенные JavaScript в части вашего приложения, я думаю, что одинарные кавычки являются победителями. Кто-то, пожалуйста, поправьте меня, если я ошибаюсь.
Технически нет никакой разницы, это только вопрос стиля и условности.
Дуглас Крокфорд рекомендует использовать одинарные кавычки для внутренних строк и двойные кавычки для внешних (по внешнему мы подразумеваем те, которые будут отображаться для пользователя приложения, например, сообщения или предупреждения).
Я лично следую этому.
ОБНОВЛЕНИЕ: Похоже, что г-н Крокфорд изменил свое мнение и теперь рекомендует использовать двойные кавычки:)
Строго говоря, нет никакой разницы в значении; так что выбор сводится к удобству.
Вот несколько факторов, которые могут повлиять на ваш выбор:
Посмотрите, что делает ссылка.
Внутри jquery.js каждая строка имеет двойные кавычки.
Итак, теперь я буду использовать строки с двумя кавычками. (Я использовал сингл!)
В основном это вопрос стиля и предпочтения. В других ответах есть несколько интересных и полезных технических исследований, поэтому, возможно, единственное, что я могу добавить, это предложить немного мирских советов.
Если вы кодируете в компании или команде, то, вероятно, это хорошая идея следуйте "стилю дома".
Если вы один взломали несколько побочных проектов, посмотрите на несколько видных лидеров сообщества. Например, скажем, вы попадаете в Node.js. Взгляните на основные модули, например, underscore.js или express, и посмотрите, что которые они используют, и подумайте над этим.
Если оба соглашения используются одинаково, то отложите их на свой личный предпочтение.
Если у вас нет личных предпочтений, переверните монету.
Если у вас нет монеты, тогда пиво на мне;)
Надеюсь, я не добавляю ничего очевидного, но я боролся с 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. Это может спасти пару проблем отладки...
Просто следите за тем, что вы используете. Но не снижайте уровень комфорта.
"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
Не уверен, что это актуально в сегодняшнем мире, но двойные кавычки, которые использовались для контента, который должен был обрабатывать управляющие символы, и одинарные кавычки для строк, которые этого не сделали.
Компилятор будет запускать манипуляции с строками в строке с двойными кавычками, оставив одну строку с кавычками буквально нетронутой. Это использовало для того, чтобы "хорошие" разработчики решили использовать одинарные кавычки для строк, которые не содержали контрольные символы, такие как \n
или \0
(не обрабатывались в одинарных кавычках) и двойные кавычки, когда они нуждались в анализируемой строке (при небольшая стоимость циклов процессора для обработки строки).
Если вы используете jshint, это приведет к возникновению ошибки, если вы используете двойную кавычку.
Я использовал его через Yeoman scafflholding AngularJS, но, возможно, есть способ настройки этого.
Кстати, когда вы обрабатываете HTML в JavaScript, проще использовать одиночную кавычку:
var foo = '<div class="cool-stuff">Cool content</div>';
И, по крайней мере, JSON использует двойные кавычки для строк-повторов.
Нет никакого тривиального способа ответить на ваш вопрос
Говоря о производительности, котировки никогда не станут вашим узким местом, однако в обоих случаях производительность одинакова.
Говоря о скорости кодирования, если вы используете '
для разграничения строки, вам нужно избежать кавычек "
. Вы, скорее всего, должны будете использовать "
внутри строки, например:
//JSON Objects:
var jsonObject = '{"foo":"bar"}';
//HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';
Затем я предпочитаю использовать '
для разграничения строки, поэтому мне нужно избежать меньшего количества символов.
Одна (глупая) причина использовать одинарные кавычки будет заключаться в том, что они не требуют, чтобы вы нажали клавишу shift, чтобы ввести их, тогда как двойная цитата. (Я предполагаю, что средняя строка не требует экранирования, что является разумным предположением.) Теперь давайте предположим, что каждый день я кодирую 200 строк кода. Возможно, в этих 200 строках у меня есть 30 цитат. Возможно, набрав двойную кавычку, нужно на 0,1 секунды больше времени, чем набирать одну цитату (потому что мне нужно нажать клавишу shift). Затем в любой день я теряю 3 секунды. Если я закоучу таким образом 200 дней в году в течение 40 лет, я потратил 6,7 часа на мою жизнь. Пища для размышлений.
Изучение плюсов и минусов
В пользу одинарных кавычек
elem.innerHTML = '<a href="' + url + '">Hello</a>';
Еще одна вещь, которую вы можете рассматривать как причину перехода от двойных кавычек к одинарным кавычкам, - это увеличение популярности серверных сценариев. При использовании PHP вы можете передавать переменные и анализировать функции javascript, используя строки и переменные в PHP.
Если вы пишете строку и используете двойные кавычки для своего PHP, вам не придется скрывать ни одну из одинарных кавычек, и PHP автоматически получит значение переменных для вас.
Пример: Мне нужно запустить функцию javascript, используя переменную с моего сервера.
public static function redirectPage( $pageLocation )
{
echo "<script type='text/javascript'>window.location = '$pageLocation';</script>";
}
Это избавляет меня от хлопот, связанных с подключением строк, и я могу эффективно вызывать javascript из PHP. Это только один пример, но это может быть одной из нескольких причин, по которым программисты не выполняют одиночные кавычки в javascript.
Цитата из документов PHP: "Самая важная особенность строк с двумя кавычками - это то, что имена переменных будут расширены. Подробнее см. в разделе" Разбор строк".
Я бы использовал двойные кавычки, когда одинарные кавычки не могут быть использованы и наоборот:
"'" + singleQuotedValue + "'"
'"' + doubleQuotedValue + '"'
Вместо:
'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
В JavaScript нет разницы между одиночными и двойными кавычками.
Важно:
Возможно, существуют различия в производительности, но они абсолютно минимальны и могут ежедневно меняться в соответствии с реализацией браузеров. Дальнейшее обсуждение бесполезно, если ваше приложение JavaScript не содержит сотни тысяч.
Это как тест, если
a=b;
быстрее, чем
a = b;
(дополнительные пробелы)
сегодня, в определенном браузере и платформе и т.д.
При использовании CoffeeScript я использую двойные кавычки. Я согласен, что вы должны выбрать один и придерживаться его. CoffeeScript дает вам интерполяцию при использовании двойных кавычек.
"This is my #{name}"
ES6 использует обратные тики (`) для строк шаблонов. Вероятно, это имеет вескую причину, но при кодировании это может быть громоздким для изменения символа строковых литералов из кавычек или двойных кавычек для обратных тиков, чтобы получить функцию интерполяции. CoffeeScript может быть не идеальным, но использование одного и того же символа строковых литералов везде (двойные кавычки) и всегда быть способным к интерполяции - хорошая функция.
`This is my ${name}`
Есть люди, которые утверждают, что имеют разницу в производительности: старая нить списка рассылки. Но я не мог найти ни одного из них для подтверждения.
Главное - посмотреть, какие цитаты (двойные или одиночные) вы используете внутри своей строки. Это помогает снизить количество побегов. Например, когда вы работаете с html внутри своих строк, проще использовать одинарные кавычки, чтобы вам не приходилось избегать всех двойных кавычек вокруг атрибутов.
У меня было около 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));
Если вы прыгаете вперед между JavaScript и С#, лучше всего тренировать пальцы для общего соглашения, которое является двойным кавычками.
После прочтения всех ответов, которые говорят, что это может быть быстрее или, возможно, иметь преимущества, я бы сказал, что двойная цитата лучше или, может быть, быстрее, потому что компилятор Google закрытия конвертировать одинарные кавычки в двойные кавычки.
Нет никакой разницы, поэтому в основном это вопрос вкуса и того, что находится в строке (или если сам код JS находится в строке), чтобы сохранить количество побегов на низком уровне.
Легенда о разнице скоростей может появиться из мира PHP, где две кавычки имеют другое поведение.
Если ваш источник 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"]
Я уверен, что это занимает некоторое время.
Просто добавьте свои 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')
.
Нижняя строка, и, как некоторые из них упомянули/ссылались на нее, выбирали конвенцию, придерживались ее и только отклонялись при необходимости.
Вы можете использовать одинарные кавычки или двойные кавычки. Это позволяет вам, например, легко вставлять javascript внутри атрибутов HTML, без необходимости избегать кавычек. То же самое, когда вы создаете javascript с PHP.
Общая идея: если можно использовать такие кавычки, которые вам не нужно бежать. Меньше экранирования = лучший код.