Uncaught SyntaxError: Неожиданный идентификатор в консоли javascript [дубликат]

Самое близкое, что я видел в python, это 12 * 1000 * 1000, что не идеально, но может быть полезно, если требуется 12000000. Однако, хотя в C они эквивалентны, поскольку во время компиляции он преобразует оба значения в одно и то же, python может не разделять эту оптимизацию.

1695
задан 9 revs, 6 users 44% 9 February 2016 в 07:59
поделиться

30 ответов

Наиболее вероятной причиной использования 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`);

Литералы шаблонов предлагают чистый синтаксис для: интерполяции переменных, многострочных строк и т. Д.

1047
ответ дан 5 revs, 5 users 43% 18 August 2018 в 03:14
поделиться
  • 1
    Важно отметить все условные обозначения кода. Определите его один раз и придерживайтесь его. IOW, не используйте двойные кавычки где-то и одинарные кавычки в другом месте. – Cerebrus 2 May 2009 в 09:03
  • 2
    @Cerebrus - Я думаю, что гибкость в порядке с этим. Конечно, выберите предпочтительный стиль, но если вам нужно оторваться от стиля, чтобы сохранить ускорение много кавычек в одной строке. Я был бы в порядке с этим. – Martin Clarke 2 May 2009 в 09:11
  • 3
    @Mathias Bynens: Вы не можете доказать существование чего-то. Докажите, что является преимуществом для одного, это путь. ;) – Pascal 12 January 2010 в 00:16
  • 4
    jsfiddle.net/5HhWF/1 Я не вижу разницы в скорости (хром) – Olly Hicks 27 December 2010 в 01:26
  • 5
    @ Паскаль, я думаю, он шутил. И это было забавно. – ACK_stoverflow 12 April 2012 в 20:47

Просто следите за тем, что вы используете.

"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
12
ответ дан 2 revs 18 August 2018 в 03:14
поделиться
  • 1
    Вы можете настроить jshint для принятия. – Nikolaj Dam Larsen 23 May 2014 в 23:16
  • 2
    Изменена ли реализация jshint? поскольку демонстрационный веб-сайт, похоже, принимает либо без каких-либо предупреждений / ошибок, и я не могу найти никаких параметров, чтобы ограничить использование jshint. Возможно, этот ответ устарел или неточен? – Lea Hayes 13 November 2015 в 10:44

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

"This is my #{name}"

ES6 использует обратные тики (`) для строк шаблона. Вероятно, это имеет вескую причину, но при кодировании это может быть громоздким для изменения символа строковых литералов из кавычек или двойных кавычек для обратных тиков, чтобы получить функцию интерполяции. CoffeeScript может быть не идеальным, но использование одного и того же символа строковых литералов во всем мире (двойные кавычки) и всегда быть способным к интерполяции - хорошая функция.

`This is my ${name}`
6
ответ дан 2 revs, 2 users 77% 18 August 2018 в 03:14
поделиться
  • 1
    Для меня этот тик - явный победитель в этом конкурсе (почти) отсутствие присутствия внутри общих текстовых строк, плюс интерполяция var – Simone Poggi 27 July 2016 в 08:15

Я выполнял следующие около 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));
5
ответ дан 2 revs, 2 users 83% 18 August 2018 в 03:14
поделиться
  • 1
    Иными словами, вы обнаружили, что более быстрый код работает быстрее всего. Это проблема при выполнении микро-тестов. Вы должны учитывать механизм JS, оптимизирующий код при его запуске. (Вы увидите тот же эффект при тестировании Java из-за того, как работает JIT.) – David Phillips 3 January 2011 в 07:46
  • 2
    первая новая дата медленная, добавьте var dummy_date = new Date() в начало – Lauri 22 October 2012 в 11:31
  • 3
    Уровень микро-оптимизации здесь настолько глуп, что вы также можете утверждать, что одинарные кавычки быстрее печатаются, что приводит к более быстрому развитию. – Beejor 13 June 2018 в 18:28

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

Спецификация важна:

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

Это как контрольный показатель, если

a=b;

быстрее, чем

a = b;

( дополнительные пробелы)

сегодня, в конкретном браузере и платформе и т. д.

6
ответ дан 2 revs, 2 users 83%mauro 18 August 2018 в 03:14
поделиться
  • 1
    без пробелов быстрее. меньше символов для разбора в строке. :п – pilavdzice 2 May 2012 в 22:50

Единственное различие проявляется в следующем:

'A string that\'s single quoted'

"A string that's double quoted"

Итак, это зависит только от того, сколько котировок вы хотите сделать. Очевидно, то же самое относится к двойным кавычкам в двойных кавычках.

112
ответ дан 2 revs, 2 users 92% 18 August 2018 в 03:14
поделиться
  • 1
    Как вы можете быть уверены, что это единственная разница? – Mathias Bynens 2 May 2009 в 08:49
  • 2
    Гарет делает хороший момент. Я не думал об этом – anonymous coward 2 May 2009 в 08:55
  • 3
    @Mathias - раздел 7.8.4 спецификации [ ecma-international.org/publications/standards/Ecma-262.htm] описывает буквенную строчную нотацию, единственное отличие состоит в том, что DoubleStringCharacter является «SourceCharacter», но не двойная кавычка " и SingleStringCharacter является «SourceCharacter, но не одинарной кавычкой». – Gareth 2 May 2009 в 11:14
  • 4
    @Mathias - Хорошо, я вижу вашу точку зрения, и хотя мне хотелось бы думать, что программы JavaScript оптимизированы до такой степени, что это делает измеримую разницу (и даже тогда это остается для прихотей конкретного интерпретатора) Это немного цинично. – Gareth 3 May 2009 в 11:22
  • 5
    Что относительно "{\"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. Это может спасти пару проблем отладки ...

13
ответ дан 3 revs, 2 users 88% 18 August 2018 в 03:14
поделиться
  • 1
    Я столкнулся с аналогичной проблемой с интерполяцией строки ES6 (обратные ссылки). Моя система сборки скомпилировала его в строку с двумя кавычками, которая разбила заголовок Auth, который работал с одинарными кавычками! – Jay 12 February 2016 в 04:07

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

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

Я лично следую этому.

UPDATE: Похоже, что г-н Крокфорд передумал и теперь рекомендует использовать двойные кавычки:)

29
ответ дан 4 revs, 2 users 82% 18 August 2018 в 03:14
поделиться
  • 1
    Дуглас Крокфорд против JQuery. Выбрать свой яд. – Eric 28 September 2012 в 02:33
  • 2
    Что такое аргументы Крокфорда? – BadHorsie 2 August 2015 в 13:09
  • 3
    Это соглашение, за которым я следую. Это более личное предпочтение. Мне нравится использовать одиночные кавычки для внутренних вещей, таких как селектор jQuery, и / или такие вещи, как getElementById ('id') ;, мне просто нравится, как он выглядит с одинарными кавычками. Но переключитесь на двойные кавычки для внешнего текста, так как он часто может содержать внутренние кавычки в тексте. Кроме того, это позволяет легко определять и различать внешние и внутренние строки, если вы пытаетесь найти ошибку в том или ином. – adimauro 27 August 2015 в 13:19
  • 4
    По состоянию на апрель 2016 года Дуглас Крокфорд теперь рекомендует использовать только двойные кавычки, так как на практике многие разработчики считают сложным использование внутренней и внешней дихотомии. – Thunderforge 30 August 2016 в 20:27
  • 5
    Спасибо @Thunderforge за это обновление – Mariusz Nowak 31 August 2016 в 06:57

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

/*
   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 показывает разницу вообще, она обрабатывает двойные кавычки немного быстрее.

Edit 2014: Современные версии Firefox / Spidermonkey больше не делают этого.

54
ответ дан 5 revs 18 August 2018 в 03:14
поделиться
  • 1
    Если в одном браузере немного быстрее, чтобы сделать это одним движением и немного быстрее в другом, чтобы сделать это по-другому, кажется, что единственное руководство, которое мы можем отнять, это то, что мы должны делать все, что нам нравится больше, потому что это повредит некоторым пользователей и помогать другим, и сумма различий, вероятно, будет незаметной. «Преждевременная оптимизация ...» и все такое. – Andrew Hedges 3 May 2009 в 07:26
  • 2
    Мне жаль, что мой комментарий не был более конструктивным. Я только говорю, что браузер предпочитает отображать свое внутреннее представление синтаксиса, вероятно, имеет очень мало общего с тем, как он анализируется и, следовательно, вероятно, не является основанием для предпочтения одного типа котировок над другим. С другой стороны, данные эффективности, сравнивающие время разбора для одиночных и двойных кавычек в браузерах, были бы более привлекательными. – Chris Calo 14 January 2012 в 07:44
  • 3
    Это потрясающий ответ, разрыв с остальными, которые просто щебетают: «Они одинаковы, они одинаковы» ... Вы сказали ». Кроме того, на других языках программирования они, как правило, быстрее для использования, чем двойные кавычки . Могу ли я спросить, какие языки? Я использовал обычные языки, такие как Java и C #, никогда не видел другого, кроме JS, который принимает строковые литералы в одинарных кавычках. Одиночные кавычки обычно используются только для символьных констант (разрешен только один символ). – ADTC 27 November 2012 в 09:03
  • 4
    AFAIK это было исправлено в Firefox 17, Firefox делал декомпиляцию при выполнении .toString, но теперь он возвращает исходную копию. Современный firefox не будет иметь этой проблемы. – Benjamin Gruenbaum 13 March 2014 в 12:14
  • 5
    Не знаю о различиях в скорости. Но я хотел бы отметить, что «Это создает впечатление, что по крайней мере один браузер анализирует JavaScript внутренне, как если бы все было написано с использованием двойных кавычек». это вздор. Это UNAPsed, как будто написано с двойными кавычками. То есть оно превратило его внутреннее представление (которое просто хранит строку, а не кавычки) в читаемую человеком версию, для которой используется один набор кавычек. Во всяком случае, это, похоже, изменилось, как и комментарий Беньямина. – subsub 11 October 2014 в 09:00

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

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

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

246
ответ дан 6 revs, 6 users 67% 18 August 2018 в 03:14
поделиться
  • 1
    Ваша первая мысль об английском языке не всегда верна и может меняться в зависимости от соглашения о местонахождении / доме. Печатные материалы обычно используют одиночные кавычки для речи и используют другое форматирование для больших блоков цитируемого текста. Ваше «разговорное» значение не является полезным определением цитат для акцента. Плюс английские пользователи в целом очень бедны кавычками и апострофами. – John Ferguson 22 January 2015 в 14:24
  • 2
    @JohnFerguson, по этой причине в одиночку, может быть желательно использовать двойные кавычки, чтобы сделать эту дифференциацию (между апострофами и процитированными проходами). – user1429980 22 January 2015 в 18:24
  • 3
    Я предпочитаю одиночные кавычки раньше, и это могло бы просто убедить меня использовать двойные кавычки для моего следующего проекта ... Спасибо – A5308Y 23 February 2015 в 08:45
  • 4
    Я все о прагматизме. Из-за того, что 1 из 100 строк, которые я печатаю или использую, имеет двойные кавычки, а многие, многие другие имеют апострофы, я использую двойники. В конце концов, однако, вы должны использовать тип цитаты, который уже используется в проекте, если вы новый разработчик проекта, или 2) используйте тот, который, по вашему мнению, имеет больше смысла. – dudewad 16 November 2015 в 18:43
  • 5
    Дело в том, что я только что напечатал (есть несколько апострофов, нет двойных кавычек;) – dudewad 16 November 2015 в 18:44

Одиночные кавычки

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

Одиночные кавычки:

Нет предпочтения:

Двойные кавычки:

68
ответ дан 7 revs, 2 users 84% 18 August 2018 в 03:14
поделиться

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

570
ответ дан Arne 18 August 2018 в 03:14
поделиться
  • 1
    Это очень важно при работе с вызовом jQuery.ajax в службу ASP.NET (веб-служба, метод страницы или MVC). – Schmuli 3 March 2011 в 12:46
  • 2
    Имена свойств внутри строки JSON должны быть двойными, но строка JSON в целом может быть одинарной кавычкой: var jsonString = '{"key1":"value1"}'; (Не то, что я рекомендую вручную создавать JSON.) – nnnnnn 9 February 2012 в 12:45
  • 3
    Вы не должны писать JSON вручную, если вы можете .stringify() его. – Camilo Martin 3 February 2013 в 04:09
  • 4
    Это право здесь - лучший аргумент в пользу использования двойных кавычек. JSON должен иметь двойные кавычки. Другие ответы в основном дают советы «быть последовательными», что означает, что если какая-либо одна часть языка может реально привести к двойной цитате, вы должны последовательно использовать эту двойную кавычку. – Josh from Qaribou 14 July 2014 в 17:07
  • 5
    Это также актуально при работе с несколькими языками, где почти все остальные lanuguages ​​(Java, C, C ++, ...) используют двойные кавычки для строк и одинарные кавычки для символов. Я предпочитаю использовать ту же цитату по всей доске и придерживаться двойных кавычек для JS. С годами сенсорного ввода дополнительный ключ для смены для двойных кавычек совершенно не имеет значения, и если ваше кодирование ограничено вашей типизацией, вам нужно практиковать типизацию правильно. – Lawrence Dol 24 September 2014 в 18:17

Если ваш источник 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"]

Я уверен, что это занимает некоторое время.

3
ответ дан B.F. 18 August 2018 в 03:14
поделиться

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

  • Если , тогда , вероятно, хорошая идея следовать «домашнему стилю».
  • Если вы одиноки взломали несколько побочных проектов, , тогда посмотрите на несколько видных лидеров сообщества. Например, допустим, вы попадаете в Node.js. Взгляните на основные модули, например, underscore.js или express, и посмотрите, какое соглашение они используют, и рассмотрите следующее.
  • Если оба соглашения используются одинаково, then отложите свое личное предпочтение.
  • Если у вас нет личных предпочтений, , тогда переворачивает монету.
  • Если у вас нет монеты, , то пиво на мне;)
12
ответ дан cavalcade 18 August 2018 в 03:14
поделиться

Изучение плюсов и минусов

В пользу одинарных кавычек

  • Меньше визуального беспорядка.
  • Создание HTML : HTML-атрибуты обычно разделяются двойными кавычками.

elem.innerHTML = '<a href="' + url + '">Hello</a>';
Однако одинарные кавычки столь же легальны в HTML.

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!\"'

Одиночные кавычки для внутренних строк и двойные для внешних. Это позволяет вам отличать внутренние константы от строк, которые должны отображаться пользователю (или записываться на диск и т. Д.). Очевидно, что вам следует избегать размещения последнего в вашем коде, но это не всегда можно сделать.

9
ответ дан Divyesh Kanzariya 18 August 2018 в 03:14
поделиться

Еще одна вещь, которую вы можете рассматривать как причину перехода от двойных кавычек к одинарным кавычкам, - это увеличение популярности серверных сценариев. При использовании PHP вы можете передавать переменные и анализировать функции javascript, используя строки и переменные в PHP.

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

Пример: Мне нужно запустить функцию javascript, используя переменную с моего сервера.

public static function redirectPage( $pageLocation )
{
    echo "<script type='text/javascript'>window.location = '$pageLocation';</script>";
}

Это значительно меня спасает хлопот в том, чтобы иметь дело с присоединением строк, и я могу эффективно вызывать javascript из PHP. Это только один пример, но это может быть одной из нескольких причин, по которым программисты не выполняют одиночные кавычки в javascript.

Цитата из документов PHP : «Самая важная особенность двойного -котированные строки - это то, что имена переменных будут расширены. Подробнее см. в разделе «Разбор строк».

8
ответ дан Dodzi Dzakuma 18 August 2018 в 03:14
поделиться
  • 1
    +1, я делаю это в своем проекте MVC.Net, чтобы двойные кавычки из C # не мешали одиночным кавычкам из javascript и наоборот. – DCShannon 12 March 2015 в 02:31
  • 2
    Я думаю, что если вы пишете JavaScript на своей странице из метода класса PHP, у вас больше проблем. – BadHorsie 2 August 2015 в 13:08

Давайте посмотрим, что делает ссылка.

Внутри jquery.js каждая строка имеет двойные кавычки.

Итак, теперь я буду использовать строки с двойными кавычками. (Я использовал одиночный!) [/ ​​G2]

18
ответ дан Frederic 18 August 2018 в 03:14
поделиться
  • 1
    Почему это проголосовало. Это вопрос стиля, и лучший стиль должен быть последовательным и следовать за теми, кто пришел перед вами. – Eric 28 September 2012 в 02:32
  • 2
    +1 Документация API jQuery API тоже. Это была единственная причина, по которой я согласился на двойные кавычки. Лично я думаю, что ответы на них «сводятся к личным предпочтениям». немного испорчены - лучше всего найти широко используемую конвенцию и придерживаться ее. И поскольку я могу скопировать и вставить примеры из jQuery (прямо или косвенно), я не хочу заменять кавычки каждый раз. – Steve Chambers 14 February 2014 в 13:53
  • 3
    Возможно, jQuery не смог следить за людьми перед ними (или действительно не волновало, как и большинство других экспертов). ;) – James Wilkins 10 June 2014 в 22:18
  • 4
    Но Угловая .... (просто шучу: P) – Jin Wang 17 October 2014 в 14:38
  • 5
    lol не уверен, если серьезно – Spets 10 October 2016 в 06:55

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

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

12
ответ дан garysb 18 August 2018 в 03:14
поделиться
  • 1
    Дело не в том, что раньше делались дела, и теперь они делали другое. Различные языки обрабатывают кавычки по-разному, а некоторые работают по мере описания. Но это вопрос JavaScript . Одиночные и двойные кавычки обрабатываются одинаково в JavaScript (за исключением того, что позволяет использовать другой тип цитаты в строке без экранирования). Нет вопроса о двойных кавычках, позволяющих управлять символами или интерполяцией строк. JavaScript не работает так. Управляющие символы и escape-последовательности работают одинаково с типом цитирования, который вы используете. – Michael Geary 16 March 2014 в 01:58
  • 2
    Как программист ex-Perl, это то, о чем я постоянно думаю, хотя я знаю, что он не имеет отношения к JS. – zkent 31 December 2014 в 17:23

Я бы использовал двойные кавычки, когда одинарные кавычки не могут быть использованы и наоборот:

"'" + singleQuotedValue + "'"
'"' + doubleQuotedValue + '"'

Вместо:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
6
ответ дан Gumbo 18 August 2018 в 03:14
поделиться
  • 1
    Как насчет строки, содержащей как одинарные кавычки, так и двойные кавычки вроде O'rea? Lly – sudhAnsu63 27 June 2013 в 08:21

Просто чтобы добавить мои 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').

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

3
ответ дан James Wilkins 18 August 2018 в 03:14
поделиться

Вы можете использовать одинарные кавычки или двойные кавычки. Это позволяет вам, например, легко вставлять javascript внутри атрибутов HTML, без необходимости избегать кавычек. То же самое, когда вы создаете javascript с PHP.

Общая идея: если можно использовать такие кавычки, которые вам не нужно бежать. Меньше экранирования = лучший код.

3
ответ дан JJTalik 18 August 2018 в 03:14
поделиться

Одна (глупая) причина использовать одинарные кавычки будет заключаться в том, что они не требуют, чтобы вы нажали клавишу shift, чтобы ввести их, тогда как двойная цитата. (Я предполагаю, что средняя строка не требует экранирования, что является разумным предположением.) Теперь давайте предположим, что каждый день я кодирую 200 строк кода. Возможно, в этих 200 строках у меня есть 30 цитат. Возможно, набрав двойную кавычку, нужно на 0,1 секунды больше времени, чем набирать одну цитату (потому что мне нужно нажать клавишу shift). Затем в любой день я теряю 3 секунды. Если я закоучу таким образом 200 дней в году в течение 40 лет, я потратил 6,7 часа на мою жизнь. Пища для размышлений.

9
ответ дан John Kurlak 18 August 2018 в 03:14
поделиться
  • 1
    Я предполагаю, что вы имеете в виду только раскладку английского языка здесь ... У меня есть немецкий, мне нужно нажать shift для обоих. В любом случае, я не понимаю, почему нажатие клавиши shift добавляет время в процесс. Я нажал смену левой рукой и нажмите клавишу цитаты справа. Это происходит в то же время, для меня нет никакой разницы. – codewandler 16 October 2015 в 09:23
  • 2
    @codewandler По-прежнему стоит нажимать клавишу сдвига, даже если вы можете нажимать ее параллельно «& quot; ключ. Это заставляет вас отвести палец от положения по умолчанию. Например, предположим, что вы печатаете: var description = "This is a \"quick\" test"; на английской клавиатуре. Для английской клавиатуры ваш мизинец должен перейти от левой клавиши сдвига до клавиши Q в верхней строке вместо перехода от клавиши A к клавише Q. Другими словами, он должен перемещаться в два раза больше расстояния. Я не знаю, где ключи на немецкой клавиатуре, но я уверен, что есть аналогичный пример. – John Kurlak 16 October 2015 в 16:55
  • 3
    @codewandler Кроме того, чтобы ввести сдвиг, даже если я могу сделать это параллельно, не позволяет левому мизиному пальцу подготовиться к типу следующего символа после & quot; в том, что вы печатаете. – John Kurlak 16 October 2015 в 16:58
  • 4
    «Временные отходы» идея немного глупо, но идея о менее эргономичном напряжении (особенно в эпоху синдрома туннеля в карпах и т. д.) делает его приятным, особенно в тех случаях, когда это в противном случае не имеет значения. Учитывая более 1000 строк кода в день, это может сэкономить сотни ежедневных мизинговых изгибов. – Beejor 13 June 2018 в 18:24

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

Говоря о скорости кодирования, если вы используете ' для разграничения строки, вы будете необходимо избегать котировок ". Скорее всего, вам понадобится использовать " внутри строки, например:

//JSON Objects:
var jsonObject = '{"foo":"bar"}';
//HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';

. Затем я предпочитаю использовать ' для разграничения строки, поэтому мне нужно избегать меньших символов.

10
ответ дан Juan Carlos 18 August 2018 в 03:14
поделиться

Строго говоря, нет разницы в значении; поэтому выбор подходит для удобства.

Вот несколько факторов, которые могут повлиять на ваш выбор:

  • Стиль дома: некоторые группы разработчиков уже используют одно соглашение или другое.
  • Требования к клиентской стороне: будете ли вы использовать кавычки в строках? (См. Ответ Ady).
  • Язык на стороне сервера: люди VB.Net могут использовать одиночные кавычки для java-скрипта, чтобы скрипты могли быть построены на стороне сервера (VB.Net использует двойные кавычки для строк, поэтому строки java-script легко различаются, если они используют одинарные кавычки).
  • Код библиотеки. Если вы используете библиотеку, использующую определенный стиль, вы можете использовать один и тот же стиль себя.
  • Личные предпочтения: вы можете отличить один или другой стиль.
24
ответ дан Kramii 18 August 2018 в 03:14
поделиться
  • 1
    Не верно, ' - 00100111 в двоичном формате, а " - 00100010 в двоичном формате. Таким образом, двойные кавычки занимают в два раза больше энергии для хранения в виде одинарных кавычек. В этом разница. – user 22 May 2017 в 21:59

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

Главное, чтобы посмотреть, какие кавычки (двойные или одиночные) вы используете внутри своей строки. Это помогает снизить количество побегов. Например, когда вы работаете с html внутри своих строк, проще использовать одинарные кавычки, чтобы вам не приходилось избегать всех двойных кавычек вокруг атрибутов.

6
ответ дан Michiel Overeem 18 August 2018 в 03:14
поделиться
  • 1
    Хотя атрибуты могут быть также окружены одинарными кавычками :) – Damir Zekić 28 October 2008 в 16:16
  • 2
    Ваше право, я думал, что xml и xhtml предписывают двойные кавычки, окружающие атрибуты, но одинарные кавычки разрешены. – Michiel Overeem 29 October 2008 в 19:15

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

4
ответ дан Mohsen 18 August 2018 в 03:14
поделиться

Если вы прыгаете вперед между JavaScript и C #, лучше всего тренировать пальцы для общего соглашения, которое является двойным кавычками.

5
ответ дан moomoo 18 August 2018 в 03:14
поделиться

Нет никакой разницы, поэтому в основном это вопрос вкуса и того, что находится в строке (или, если сам код JS находится в строке), чтобы сохранить количество побегов.

Легенда о разнице скоростей может исходить из мира PHP, где две кавычки имеют другое поведение.

3
ответ дан PhiLho 18 August 2018 в 03:14
поделиться
  • 1
    И Руби, я могу добавить. Python имеет то же поведение, что и JavaScript: никакой разницы между одиночными / двойными кавычками. – Damir Zekić 28 October 2008 в 16:19

Если вы делаете встроенный JavaScript (возможно, «плохой», но избегаете этого обсуждения), я считаю, что единственные кавычки - это единственная опция для строковых литералов.

, например, это прекрасно работает:

<a onclick="alert('hi');">hi</a>

Но вы не можете обернуть «привет» в двойные кавычки, используя любой способ экранирования, о котором я знаю. Даже &quot; , который был бы моим лучшим предположением (поскольку вы избегаете кавычек в значении атрибута HTML), не работает для меня в Firefox. \" не будет работать, потому что на этом этапе вы ускользаете для HTML, а не для JavaScript.

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

30
ответ дан Tom Lianza 18 August 2018 в 03:14
поделиться
  • 1
    Согласитесь, что это плохо, но если это нужно сделать, я уверен, что кодировка в стиле URL может быть использована, например, <a onclick="alert(%22hi%22);">hi</a> - из памяти это работает, хотя, возможно, это было в атрибуте href <a href="javascript:alert(%22hi%22);">hi</a> – Graza 16 December 2009 в 11:33
  • 2
    <a onclick='alert("hi");'>hi</a> является законным ... – PhiLho 13 May 2011 в 13:19
  • 3
    <a onclick="alert(&quot;hi&quot;)"> работает для меня .. – Robert 4 July 2011 в 00:06
  • 4
    @Tom Lianza, конечно alert(&quot;hi&quot;) недействителен JavaScript. Но значения атрибутов закодированы. w3.org/TR/html4/intro/sgmltut.html#didx-attribute – Robert 22 July 2011 в 20:33
  • 5
    Согласен с @Robert здесь. &quot; - это правильный способ избежать двойной кавычки внутри атрибута 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 использует двойные кавычки для воспроизведения Строки.

Нет тривиального способа ответить на ваш вопрос

12
ответ дан 2 revs 18 August 2018 в 03:14
поделиться
  • 1
    Вы можете настроить jshint для принятия. – Nikolaj Dam Larsen 23 May 2014 в 23:16
  • 2
    Изменена ли реализация jshint? поскольку демонстрационный веб-сайт, похоже, принимает либо без каких-либо предупреждений / ошибок, и я не могу найти никаких параметров, чтобы ограничить использование jshint. Возможно, этот ответ устарел или неточен? – Lea Hayes 13 November 2015 в 10:44
Другие вопросы по тегам:

Похожие вопросы: