Самое близкое, что я видел в python, это 12 * 1000 * 1000
, что не идеально, но может быть полезно, если требуется 12000000
. Однако, хотя в C они эквивалентны, поскольку во время компиляции он преобразует оба значения в одно и то же, python может не разделять эту оптимизацию.
Наиболее вероятной причиной использования single vs double в разных библиотеках является предпочтение программиста и / или согласованность 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(`The escape the \` back-tick character in a string`);
Литералы шаблонов предлагают чистый синтаксис для: интерполяции переменных, многострочных строк и т. Д.
Просто следите за тем, что вы используете.
"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
При использовании CoffeeScript я использую двойные кавычки. Я согласен, что вы должны выбрать один и придерживаться его. CoffeeScript дает вам интерполяцию при использовании двойных кавычек.
"This is my #{name}"
ES6 использует обратные тики (`) для строк шаблона. Вероятно, это имеет вескую причину, но при кодировании это может быть громоздким для изменения символа строковых литералов из кавычек или двойных кавычек для обратных тиков, чтобы получить функцию интерполяции. CoffeeScript может быть не идеальным, но использование одного и того же символа строковых литералов во всем мире (двойные кавычки) и всегда быть способным к интерполяции - хорошая функция.
`This is my ${name}`
Я выполнял следующие около 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));
var dummy_date = new Date()
в начало
– Lauri
22 October 2012 в 11:31
Нет никакой разницы между одиночными и двойными кавычками в JavaScript.
Спецификация важна:
Возможно, существуют различия в производительности, но они абсолютно минимальны и могут меняться каждый день в соответствии с реализация браузеров. Дальнейшее обсуждение бесполезно, если ваше приложение JavaScript не имеет сотни тысяч.
Это как контрольный показатель, если
a=b;
быстрее, чем
a = b;
( дополнительные пробелы)
сегодня, в конкретном браузере и платформе и т. д.
Единственное различие проявляется в следующем:
'A string that\'s single quoted'
"A string that's double quoted"
Итак, это зависит только от того, сколько котировок вы хотите сделать. Очевидно, то же самое относится к двойным кавычкам в двойных кавычках.
"{\"name\": \"Peter\"}"
vs '{"name": "Peter"}'
? По общему признанию, вы можете сказать, что это та же разница, но это, безусловно, повлияет на ваше решение иначе, чем на примере выше.
– Trevor
16 June 2015 в 20:55
Надеюсь, я не добавляю ничего очевидного, но я боролся с этим 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. Это может спасти пару проблем отладки ...
Технически нет никакой разницы, это только вопрос стиля и условности.
Дуглас Крокфорд рекомендует использовать одинарные кавычки для внутренних строк и двойные кавычки для внешних (по внешнему мы подразумеваем те, которые должны отображаться пользователю приложения , как сообщения или предупреждения).
Я лично следую этому.
UPDATE: Похоже, что г-н Крокфорд передумал и теперь рекомендует использовать двойные кавычки:)
Я хотел бы сказать, что разница чисто стилистическая, но у меня действительно есть сомнения. Рассмотрим следующий пример:
/*
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-Paul Koch еще в 2003 году.
Кажется, что одинарные кавычки иногда быстрее в Проводнике Windows (примерно 1/3 моих тестов показывали более быстрое время отклика), но если Mozilla показывает разницу вообще, она обрабатывает двойные кавычки немного быстрее.
blockquote>Edit 2014: Современные версии Firefox / Spidermonkey больше не делают этого.
.toString
, но теперь он возвращает исходную копию. Современный firefox не будет иметь этой проблемы.
– Benjamin Gruenbaum
13 March 2014 в 12:14
Нет лучшего решения; однако я хотел бы утверждать, что двойные кавычки могут быть более желательными время от времени:
"
, чтобы идентифицировать прохождение цитируемого текста. Если бы мы использовали одну цитату '
, читатель мог бы неправильно истолковать ее как сокращение. Другой смысл прохода текста, окруженного '
, указывает на «разговорное» значение. Имеет смысл придерживаться уже существующих языков, и это, вероятно, облегчит изучение и интерпретацию кода. "I'm going to the mall"
по сравнению с иначе экранированной версией: 'I\'m going to the mall'
. Тем не менее, как утверждали другие, наиболее важно оставаться последовательным.
Я бы хотел, чтобы двойные кавычки были стандартными, потому что они имеют немного больше смысла , но я продолжаю использовать одинарные кавычки, потому что они доминируют над сценой.
Одиночные кавычки:
Нет предпочтения:
Двойные кавычки:
Если вы имеете дело с JSON, следует отметить, что, строго говоря, строки JSON должны быть двойными. Конечно, многие библиотеки поддерживают одиночные кавычки, но у меня были большие проблемы в одном из моих проектов, прежде чем понять, что одинарная кавычка строки на самом деле не соответствует стандартам JSON.
var jsonString = '{"key1":"value1"}';
(Не то, что я рекомендую вручную создавать JSON.)
– nnnnnn
9 February 2012 в 12:45
.stringify()
его.
– Camilo Martin
3 February 2013 в 04:09
Если ваш источник 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"]
Я уверен, что это занимает некоторое время.
Это в основном вопрос стиля и предпочтения. В других ответах есть несколько интересных и полезных технических исследований, поэтому, возможно, единственное, что я могу добавить, это дать небольшой мирский совет.
Изучение плюсов и минусов
blockquote>В пользу одинарных кавычек
- Меньше визуального беспорядка.
- Создание HTML : HTML-атрибуты обычно разделяются двойными кавычками.
Однако одинарные кавычки столь же легальны в HTML.elem.innerHTML = '<a href="' + url + '">Hello</a>';
elem.innerHTML = "<a href='" + url + "'>Hello</a>";
Кроме того, встроенный HTML обычно является анти-шаблоном. Предпочитают шаблоны.
- Генерация JSON: в JSON разрешены только двойные кавычки.
myJson = '{ "hello world": true }';
Опять же, вам не нужно создавать JSON таким образом. JSON.stringify () достаточно часто. Если нет, используйте шаблоны.
В пользу двойных кавычек
- Парные пары легче обнаружить, если у вас нет цветового кодирования. Как и в случае с консольным журналом или какой-либо установкой источника просмотра.
- Сходство с другими языками: в программировании оболочки (Bash и т. Д.) Существуют строковые литералы с одной кавычкой, но escape-коды не интерпретируются внутри них. C и Java используют двойные кавычки для строк и одинарные кавычки для символов.
- Если вы хотите, чтобы код был действительным JSON, вам нужно использовать двойные кавычки.
В пользу как
В JavaScript нет разницы между ними. Поэтому вы можете использовать то, что сейчас удобно. Например, следующие строковые литералы производят одну и ту же строку:
"He said: \"Let's go!\"" 'He said: "Let\'s go!"' "He said: \"Let\'s go!\"" 'He said: \"Let\'s go!\"'
Одиночные кавычки для внутренних строк и двойные для внешних. Это позволяет вам отличать внутренние константы от строк, которые должны отображаться пользователю (или записываться на диск и т. Д.). Очевидно, что вам следует избегать размещения последнего в вашем коде, но это не всегда можно сделать.
Еще одна вещь, которую вы можете рассматривать как причину перехода от двойных кавычек к одинарным кавычкам, - это увеличение популярности серверных сценариев. При использовании PHP вы можете передавать переменные и анализировать функции javascript, используя строки и переменные в PHP.
Если вы пишете строку и используете двойные кавычки для своего PHP, вам не придется скрывать ни одну из одинарных кавычек и PHP будет автоматически извлекать значение переменных для вас.
Пример: Мне нужно запустить функцию javascript, используя переменную с моего сервера.
public static function redirectPage( $pageLocation )
{
echo "<script type='text/javascript'>window.location = '$pageLocation';</script>";
}
Это значительно меня спасает хлопот в том, чтобы иметь дело с присоединением строк, и я могу эффективно вызывать javascript из PHP. Это только один пример, но это может быть одной из нескольких причин, по которым программисты не выполняют одиночные кавычки в javascript.
Цитата из документов PHP : «Самая важная особенность двойного -котированные строки - это то, что имена переменных будут расширены. Подробнее см. в разделе «Разбор строк».
Давайте посмотрим, что делает ссылка.
Внутри jquery.js каждая строка имеет двойные кавычки.
Итак, теперь я буду использовать строки с двойными кавычками. (Я использовал одиночный!) [/ G2]
Не уверен, что это актуально в сегодняшнем мире, но двойные кавычки использовались для контента, для которого были обработаны управляющие символы, и одинарные кавычки для строк, которые этого не сделали.
Компилятор будет запущен Строковое манипулирование в двойной кавычной строке, оставляя одну строку с кавычками буквально нетронутой. Это использовало для того, чтобы «хорошие» разработчики решили использовать одинарные кавычки для строк, которые не содержали контрольные символы, такие как \n
или \0
(не обрабатывались в одинарных кавычках) и двойные кавычки, когда им нужна строка, проанализированная (при небольшая стоимость циклов процессора для обработки строки).
Я бы использовал двойные кавычки, когда одинарные кавычки не могут быть использованы и наоборот:
"'" + singleQuotedValue + "'"
'"' + doubleQuotedValue + '"'
Вместо:
'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
Просто чтобы добавить мои 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 для имен используются двойные кавычки, но вне этого лично я предпочитаю одиночные кавычки, когда escaping никогда не требуется для текста между кавычками - как document.createElement('div')
.
Нижняя строка, и, как некоторые из них упоминали / намекали, выбирали соглашение, придерживались его и только отклонялись при необходимости.
Вы можете использовать одинарные кавычки или двойные кавычки. Это позволяет вам, например, легко вставлять javascript внутри атрибутов HTML, без необходимости избегать кавычек. То же самое, когда вы создаете javascript с PHP.
Общая идея: если можно использовать такие кавычки, которые вам не нужно бежать. Меньше экранирования = лучший код.
Одна (глупая) причина использовать одинарные кавычки будет заключаться в том, что они не требуют, чтобы вы нажали клавишу shift, чтобы ввести их, тогда как двойная цитата. (Я предполагаю, что средняя строка не требует экранирования, что является разумным предположением.) Теперь давайте предположим, что каждый день я кодирую 200 строк кода. Возможно, в этих 200 строках у меня есть 30 цитат. Возможно, набрав двойную кавычку, нужно на 0,1 секунды больше времени, чем набирать одну цитату (потому что мне нужно нажать клавишу shift). Затем в любой день я теряю 3 секунды. Если я закоучу таким образом 200 дней в году в течение 40 лет, я потратил 6,7 часа на мою жизнь. Пища для размышлений.
var description = "This is a \"quick\" test";
на английской клавиатуре. Для английской клавиатуры ваш мизинец должен перейти от левой клавиши сдвига до клавиши Q в верхней строке вместо перехода от клавиши A к клавише Q. Другими словами, он должен перемещаться в два раза больше расстояния. Я не знаю, где ключи на немецкой клавиатуре, но я уверен, что есть аналогичный пример.
– John Kurlak
16 October 2015 в 16:55
Говоря о производительности, кавычки никогда не будут вашим узким местом, однако в обоих случаях производительность одинакова.
Говоря о скорости кодирования, если вы используете '
для разграничения строки, вы будете необходимо избегать котировок "
. Скорее всего, вам понадобится использовать "
внутри строки, например:
//JSON Objects:
var jsonObject = '{"foo":"bar"}';
//HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';
. Затем я предпочитаю использовать '
для разграничения строки, поэтому мне нужно избегать меньших символов.
Строго говоря, нет разницы в значении; поэтому выбор подходит для удобства.
Вот несколько факторов, которые могут повлиять на ваш выбор:
'
- 00100111
в двоичном формате, а "
- 00100010
в двоичном формате. Таким образом, двойные кавычки занимают в два раза больше энергии для хранения в виде одинарных кавычек. В этом разница.
– user
22 May 2017 в 21:59
Есть люди, которые заявляют о различиях в производительности: старый список рассылки . Но я не мог найти ни одного из них для подтверждения.
Главное, чтобы посмотреть, какие кавычки (двойные или одиночные) вы используете внутри своей строки. Это помогает снизить количество побегов. Например, когда вы работаете с html внутри своих строк, проще использовать одинарные кавычки, чтобы вам не приходилось избегать всех двойных кавычек вокруг атрибутов.
После прочтения всех ответов, которые говорят, что может быть быстрее или, возможно, иметь преимущества, я бы сказал, что двойная цитата лучше или, может быть, быстрее, потому что компилятор Google закрытия конвертирует одинарные кавычки в двойные кавычки.
Если вы прыгаете вперед между JavaScript и C #, лучше всего тренировать пальцы для общего соглашения, которое является двойным кавычками.
Нет никакой разницы, поэтому в основном это вопрос вкуса и того, что находится в строке (или, если сам код JS находится в строке), чтобы сохранить количество побегов.
Легенда о разнице скоростей может исходить из мира PHP, где две кавычки имеют другое поведение.
Если вы делаете встроенный JavaScript (возможно, «плохой», но избегаете этого обсуждения), я считаю, что единственные кавычки - это единственная опция для строковых литералов.
, например, это прекрасно работает:
<a onclick="alert('hi');">hi</a>
Но вы не можете обернуть «привет» в двойные кавычки, используя любой способ экранирования, о котором я знаю. Даже "
, который был бы моим лучшим предположением (поскольку вы избегаете кавычек в значении атрибута HTML), не работает для меня в Firefox. \"
не будет работать, потому что на этом этапе вы ускользаете для HTML, а не для JavaScript.
Итак, если имя игры согласовано, я собираюсь сделать некоторые встроенные JavaScript в частях вашего приложения, я думаю, что одинарные кавычки являются победителями. Кто-то, пожалуйста, поправьте меня, если я ошибаюсь.
<a onclick="alert(%22hi%22);">hi</a>
- из памяти это работает, хотя, возможно, это было в атрибуте href <a href="javascript:alert(%22hi%22);">hi</a>
– Graza
16 December 2009 в 11:33
alert("hi")
недействителен JavaScript. Но значения атрибутов закодированы. w3.org/TR/html4/intro/sgmltut.html#didx-attribute
– Robert
22 July 2011 в 20:33
"
- это правильный способ избежать двойной кавычки внутри атрибута HTML. Он отлично работает в Firefox. @Denilson, XML (и поэтому XHTML) допускает как одиночные, так и двойные кавычки. См. Литерал AttValue
в спецификации XML в w3.org/TR/REC-xml/#d0e888 .
– Chris Calo
10 January 2012 в 15:06
Если вы используете jshint , это приведет к возникновению ошибки, если вы используете двойную кавычку.
Я использовал ее через yoman scafflholding AngularJS, но, возможно,
Кстати, когда вы обрабатываете HTML в JavaScript, проще использовать одиночную кавычку:
var foo = '<div class="cool-stuff">Cool content</div>';
И по крайней мере JSON использует двойные кавычки для воспроизведения Строки.
Нет тривиального способа ответить на ваш вопрос