Питання Коли використовувати JavaScript або подвійні або окремі лапки?


console.log("double"); проти console.log('single');

Я бачу більше і більше бібліотек JavaScript, використовуючи окремі лапки під час обробки рядків. Які причини використовувати один над іншим? Я думав, що вони майже взаємозамінні.


1688


походження


що простіше для читання? оповіщення ("Це час гри"); або оповіщення ("Це ігровий час"); - Ryan Miller
Як про це Райан? alert("It's \"game\" time."); або alert('It\'s "game" time.');? - Francisc
Якщо одиночні лапки завжди використовуються, а іноді подвійні лапки, де буквальний містить одну цитату, то нам доведеться вводити набагато менше кнопок переміщення, а наш ліва маленький палець дасть нам благословення. Але так, як сказав @arne, для JSON повинна бути використана подвійна цитата. - IsmailS
Єдине цитування легше робити, коли ви перебуваєте на європейській клавіатурі (подвійна цитата - це Shift + 2, що не так солодко, як просто натискання однієї клавіші правою рукою). - Arne
@Arne Немає такої речі, як "європейська клавіатура". Наприклад, в Німецька клавіатура вимагає зміни для обох типів котирувань. (Але одинарні лапки легше.) - ANeves


Відповіді:


Найбільш імовірною причиною використання одиночного або подвійного в різних бібліотеках є перевага програміста та / або узгодженість 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`);

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


1044



Важливо відзначити всі конвенції коду - Визначте це один раз і дотримуйтесь його. IOW, не використовуйте подвійні лапки в деяких місцях та одиночні лапки в іншому місці. - Cerebrus
@Cerebrus - Я думаю, гнучкість ОК з цим. Звичайно, виберіть потрібний стиль, але якщо вам потрібно відірватися від стилю, щоб зберегти рясні лапки в одній ланці. Я б з цим добре. - Martin Clarke
@ Матіас Байнс: Ви не можете довести відсутність чогось. Доведіть, що там є це перевага для одного, це шлях. ;) - Pascal
jsfiddle.net/5HhWF/1 Я не бачу різниці в швидкості (хром) - Olly Hicks
@Pascal Я думаю, він жартував. І це було смішно. - ACK_stoverflow


Якщо ви маєте справу з JSON, слід зазначити, що, строго кажучи, рядки JSON повинні бути подвійними. Звичайно, багато бібліотек також підтримують окремі лапки, але в одному з моїх проектів я мав великі проблеми, перш ніж усвідомив, що одиночне кодування рядка насправді не відповідає стандартам JSON.


569



Це дуже важливо при роботі з jQuery.ajax, який викликає в ASP.NET сервіс (Web Service, Page Method або MVC). - Schmuli
Назви властивостей в межах рядки JSON повинні бути подвійними, але рядок JSON в цілому може бути однозначно цитованим: var jsonString = '{"key1":"value1"}'; (Не те, що я рекомендую вручну будувати JSON.) - nnnnnn
Ви не повинні писати JSON вручну, якщо можете .stringify() це - Camilo Martin
Це прямо тут - найкращий аргумент для постійного використання подвійних лапок. JSON має мати подвійні лапки. Інші відповіді, в основному, дають пораду "бути послідовними", що означає, що якщо будь-яка частина мови може реально призвести до подвійної цитати, то ви повинні постійно використовувати цю подвійну пропозицію. - Josh from Qaribou
Це також має значення при роботі з кількома мовами, де практично всі інші lanuguages ​​(Java, C, C ++, ...) використовують подвійні лапки для рядків і одиночні лапки для символів. Я вважаю за краще використовувати той самий цитат по всій дошці, і таким чином дотримуватися подвійних лапок для JS. За кілька років натискання додатковий ключ для переміщення для подвійних лапок абсолютно не має значення, і якщо ваше кодування обмежується вашим набором, то вам потрібно практикувати набір правильно. - Lawrence Dol


Немає кращого рішення; однак, я хотів би стверджувати, що подвійні лапки іноді можуть бути більш бажаними:

  • Нові учасники вже будуть знайомі з подвійними лапками з їхньої мови. На англійській мові ми повинні використовувати подвійні лапки " для ідентифікації проходу цитованого тексту. Якщо б ми мали використовувати одну цитату ', читач може неправильно тлумачити це як скорочення. Інше значення проходження тексту, оточеного ' вказує на "розмовне" значення. Має сенс залишатися в курсі існуючих мов, і це, ймовірно, полегшить вивчення та інтерпретацію коду.
  • Подвійні лапки усувають необхідність уникнути апострофів (як у сутички). Розглянемо рядок: "I'm going to the mall", проти інакше врятованої версії: 'I\'m going to the mall'.
  • Подвійні лапки означають рядок на багатьох інших мовах. Коли ви вивчаєте нову мову, як Java або C, подвійні лапки завжди використовуються. У Ruby, PHP та Perl, рядки, що котируються однією комою, не передбачають відсутності зворотної косої риски, тоді як подвійні лапки підтримують їх.

  • Нотація JSON записується з подвійними лапками.

Тим не менше, як зазначають інші, найголовніше залишатися послідовними.


244



Ваш перший пункт про англійську мову не завжди правильний і може змінюватися в залежності від місцевої / домашньої конвенції. Друковані матеріали зазвичай використовують одиночні котировки для мови та використовують інше форматування для великих блоків цитованого тексту. Ваше "розмовне" значення не є корисним визначенням котирувань для акцентів. Плюс англійські користувачі в цілому дуже бідні з лапками та апострофами. - John Ferguson
@ Джон Фергюсон, саме з цієї причини може бути бажано використовувати подвійні лапки, щоб зробити цю диференціацію (між апострофами та цитатами). - user1429980
Я раніше виступав за одноразові котирування, і це могло просто переконати мене використовувати подвійні лапки для мого наступного проекту ... Спасибо - A5308Y
Я все про прагматизм. Через те, що 1 з 100 рядків, які я вводить або використовую, мають подвійні лапки, а багато, багато інших мають апострофи, я використовую подвійні. В кінці дня, однак, ви повинні використовувати тип цитування, який 1) вже використовується в проекті, якщо ви новий розробник проекту, або 2) використовуйте те, що, на вашу думку, має сенс. - dudewad
Справа в тому, що я просто набрала (є кілька апострофів, немає подвійних лапок;) - dudewad


The тільки різниця продемонстрована в наступному:

'A string that\'s single quoted'

"A string that's double quoted"

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


112



Як ви можете бути впевнені, що це єдина різниця? - Mathias Bynens
Гарет робить хороший момент. Я не думав про це - anonymous coward
@ Матіас - розділ 7.8.4 специфікації [ecma-international.org/publications/standards/Ecma-262.htm] описує буквенне позначення рядка, єдиною відмінністю є те, що DoubleStringCharacter це "SourceCharacter, але не подвійна цитата", і SingleStringCharacter це "SourceCharacter, але не single quote" - Gareth
@Mathias - Добре, я бачу вашу точку зору, і хоча я хотів би думати, що програми JavaScript оптимізовані до того моменту, коли це робить помітну різницю (і навіть тоді це залишається примхам конкретного перекладача), я m трохи цинічно про це. - Gareth
А як на рахунок "{\"name\": \"Peter\"}" проти '{"name": "Peter"}'? Звичайно, ви можете сказати, що це однакова різниця, але це, безумовно, вплине на ваше рішення іншим способом, ніж приклад вище. - Trevor


Одне котирування

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

Єдині лапки:

Немає уподобання:

Подвійні лапки:


68



Крокфорд тепер воліє подвійні лапки. - Adam Calvet Bohl
Google тепер рекомендує подвійні лапки - Suraj Jain
airbnb тепер воліє подвійні лапки - Suraj Jain
@ SurajJain джерело? Airbnb і Google довідники стилю все ще залишаються окремими як бажані. - Olegs Jeremejevs
@SurajJain Ах, це перевірки конфігурацій стилів коду, написані на JSON, що взагалі забороняє використання окремих лапок. Читання їх - це чудовий спосіб порівняти вибір, зроблений різними проектами. - Olegs Jeremejevs


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

/*
   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.

Висновок: Я думаю, ми повинні зробити більше досліджень на цьому.

Редагувати: Це може пояснити Результати тестів Петра-Поль Коча з 2003 року.

Здається, що єдина лапка іноді швидше в Провіднику Windows (приблизно 1/3 моїх тестів показали швидкий час відгуку), але якщо Mozilla взагалі демонструє різницю, воно подрібнює подвійні лапки трохи швидше. У Opera я взагалі не відрізнявся.

Редагувати 2014: Сучасні версії Firefox / Spidermonkey більше не роблять цього.


54



Якщо це трохи швидше в одному браузері, щоб зробити це одним способом і трохи швидше в іншому, щоб зробити це іншим способом, здається, що єдиним керівництвом, яке ми можемо позбутися від цього, є те, що ми повинні робити все, що нам подобається більше, тому що це буде шкодити деяким користувачів і допомагати іншим, і кількість різниці, ймовірно, буде непомітною. "Передчасна оптимізація ..." і все це. - Andrew Hedges
Мені шкода, що мій коментар був не більш конструктивним. Я лише кажу, що те, як браузер вибирає відображення свого внутрішнього представлення синтаксису, мабуть, дуже мало пов'язаний з тим, як він аналізується, і, отже, ймовірно, не є підставою для вибору одного типу цитат над іншим. З іншого боку, показники ефективності, що порівнюють час розбору для одно- або подвійних лапок, будуть більш переконливими. - Chris Calo
Це чудова відповідь, перерва від решти, що просто чірікають "вони" однаково "вони точно" ... Ви сказали "Крім того, на інших мовах програмування вони зазвичай швидше використовуються, ніж подвійні лапки", Чи можу я запитати, які мови? Я використав звичайні langs, як Java і C #, ніколи не бачив жодного, окрім JS, який приймає рядкові літерали в одиночних лапках. Одиночні котирування корпусів зазвичай використовуються лише для констант символів (дозволено лише один символ). - ADTC
AFAIK це було виправлено в Firefox 17, Firefox використав декомпіляцію при виконанні .toString але тепер він повертає оригінальну копію. Сучасний Firefox не матиме цієї проблеми. - Benjamin Gruenbaum
Не знаю про різницю швидкості. Але я хотів би відзначити, що "Це створює враження, що принаймні один браузер відслідковує JavaScript всередині, як якби все було написано за допомогою подвійних лапок". це нісенітниця. Це UNparsed так, як якщо б він написаний з подвійними лапками. Тобто це перетворило його внутрішнє зображення (яке просто зберігає рядок, а не лапки) у читабельну версію, для якої буває використання одного набору цитат. Як би там не було, це, здається, змінилося, як зауважує Бенджамін. - subsub


Якщо ви робите вбудований JavaScript (можливо, "погану" річ, але уникаючи цієї дискусії) сингл Цитати є вашим єдиним варіантом для рядкових літералів, я вірю.

наприклад, це добре працює:

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

Але ви не можете обернути "привет" у подвійних лапках, за допомогою будь-якого способу врятування, який я знаю. Навіть &quot; що було б найкращим припущенням (оскільки ви втечіте від цитат у значенні значення атрибуту HTML) не працює для мене в Firefox. \" не буде працювати і тому, що в цей момент ви вириваєтеся за HTML, а не за JavaScript.

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


30



Погодьтеся, що це, мабуть, погана річ, однак, якщо це потрібно зробити, я впевнений, кодування в стилі URL можна використовувати, наприклад <a onclick="alert(%22hi%22);">hi</a> - з пам'яті це працює, хоча це, можливо, було в атрибуті href замість нього <a href="javascript:alert(%22hi%22);">hi</a> - Graza
<a onclick='alert("hi");'>hi</a> це теж законно ... - PhiLho
<a onclick="alert(&quot;hi&quot;)"> працює для мене .. - Robert
@ Тома Льянза, безумовно alert(&quot;hi&quot;) недійсний JavaScript. Але значення атрибутів закодовані. w3.org/TR/html4/intro/sgmltut.html#didx-attribute - Robert
Погоджено з @Robert тут. &quot; це правильний спосіб уникнути подвійної цитати всередині атрибута HTML. Це чудово працює в Firefox. @Denilson, XML (а, отже, XHTML) дозволяє використовувати як одиничні, так і подвійні лапки. Див AttValue буквально в специфікації XML на w3.org/TR/REC-xml/#d0e888. - Chris Calo


Технічно немає ніякої різниці, це лише питання стилю і згоди.

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

Я особисто йду за цим.

UPDATE: Здається, що містер Крокфорд змінив свій розум і тепер рекомендує використовувати подвійні лапки по :)


29



Дуглас Крокфорд проти JQuery. Виберіть свою отруту. - Eric
Що таке міркування Крокфорда? - BadHorsie
Це конвенція, яку я дотримуюся. Це більше особистих уподобань. Мені подобається використовувати одиночні лапки для внутрішніх речей, таких як jQuery селектори та / або такі речі, як getElementById ('id'); я просто хотів би виглядати так, як виглядає цілими одиночними лапками. Але перейдіть на подвійні лапки для зовнішнього тексту, оскільки воно часто може містити внутрішні цитати в тексті. Також це полегшує виявлення та диференціювання зовнішніх і внутрішніх рядків, якщо ви намагаєтесь знайти помилку в тому чи іншому. - adimauro
Станом на квітень 2016 року Дуглас Крокфорд зараз рекомендує використовуючи лише подвійні лапки, враховуючи те, що на практиці багато розробників виявили, що внутрішня і зовнішня дихотомія важко використовувати. - Thunderforge
Дякуємо @Thunderforge за це оновлення - Mariusz Nowak


Строго кажучи, немає сенсу; тому вибір зводиться до зручності.

Ось кілька факторів, які можуть вплинути на ваш вибір:

  • Стиль будинку: деякі групи розробників вже використовують одну конвенцію або іншу.
  • Вимоги клієнта: чи будете ви використовувати цитати в рядках? (Див. Відповідь Аді).
  • Мова на серверній стороні: користувачі VB.Net можуть вибрати використання однієї лапки для java-script, щоб скрипти могли бути побудовані на стороні сервера (VB.Net використовує подвійні лапки для рядків, тому рядки java-script легко розрізняти якщо вони використовують одиночні лапки).
  • Код бібліотеки. Якщо ви використовуєте бібліотеку, яка використовує певний стиль, ви можете використовувати цей стиль самостійно.
  • Особисті уподобання. Можливо, одне чи інше стиль виглядає краще.

24



Неправда, ' є 00100111 в двійковій, в той час як " є 00100010 в бінарному вигляді. Таким чином, подвійні лапки займають вдвічі більше енергії для зберігання у вигляді одиночних лапок. Це різниця тут.