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


1968

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

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


125
що легше читати? попередження ("Настав час гри"); або попередження ("Це ігровий час");
Райан Міллер

591
Як щодо цього Райана? alert("It's \"game\" time.");або alert('It\'s "game" time.');?
Франциск

37
Якщо одиничні лапки завжди використовуються, а іноді - подвійні лапки, де буквальний містить єдину цитату, тоді нам доведеться набрати набагато менше кнопок зсуву, а лівий мізинець дасть нам благословення. Але так, як сказав @arne, для JSON слід використовувати подвійну цитату.
ІсмаїлС

9
Одно цитування простіше зробити, коли ви перебуваєте на європейській клавіатурі (подвійна цитата - Shift + 2, що не так мило, як зручно натискати одну клавішу правою рукою).
Арн

38
@Arne Не існує такого поняття, як "європейська клавіатура". Наприклад, німецька клавіатура вимагає зміни для обох типів лапок. (Але поодинокі цитати простіше.)
ANeves

Відповіді:


1221

Найбільш вірогідною причиною використання синглу 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(`Escape the \` back-tick character and the \${ dollar-brace sequence in a string`);

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

Зауважте, що JSON офіційно визначений для використання подвійних лапок, які, можливо, варто розглянути, залежно від системних вимог.


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

170
@Cerebrus - Я думаю, що з цим гнучкістю все в порядку. Звичайно, виберіть бажаний стиль, але якщо вам потрібно відірватися від стилю, щоб зберегти безліч цитат в одній рядку. Я з цим все в порядку.
Мартін Кларк

5
Я не думаю, що немає причин бути послідовними щодо цього. Немає жодної переваги ні перед одним, і я не думаю, що читабельність насправді впливає на те, чи використовуєте ви "в одному місці" і "в іншому"
cdmckay

2
@Olly Hicks, цікавий тест !! Одиночні цитати насправді в кілька разів швидше, ніж подвійні лапки тут у Chrome 13 (OSX). Цікаво ...
Ricket

12
Трохи поза темою, але якби люди використовували правильну типографію, багато цих дискусій про втечу були б застарілими: alert('It’s “game” time')vs. alert("It’s “game” time")- не має значення. Вам потрібно буде тільки бігти в (рідкісних) випадках , коли одинарний або подвійний простий знак ', "насправді необхідно.
jotaen

617

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


5
Це дуже актуально під час роботи з jQuery.ajax, звертаючись до служби ASP.NET (веб-сервіс, метод сторінки або MVC).
Шмулі

100
Імена властивостей у рядках JSON повинні бути подвійними цитатами, але рядок JSON в цілому може бути одноцитується: var jsonString = '{"key1":"value1"}';(Не те, що я рекомендую будувати JSON вручну)
nnnnnn

51
Ви не повинні писати JSON від руки, якщо можете .stringify().
Каміло Мартін

23
Це саме тут найкращий аргумент для використання подвійних лапок. JSON повинен мати подвійні лапки. Інші відповіді здебільшого дають пораду "бути послідовним", а це означає, що якщо будь-яка частина мови може реально змусити подвійну цитату, вам слід постійно використовувати цю подвійну цитату.
Джош з Карібу

18
Це також актуально під час роботи з декількома мовами, де майже всі інші мови (Java, C, C ++, ...) використовують подвійні лапки для рядків та одинарні лапки для символів. Я вважаю за краще використовувати одне і те ж цитування на всій дошці і так дотримуватися подвійних цитат для JS. З роком дотику вводити додаткову клавішу для переведення на подвійні лапки зовсім не має значення, і якщо ваше кодування обмежується вашим набором тексту, вам потрібно правильно практикувати введення тексту.
Лоуренс Дол

336

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

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

  • Позначення JSON пишеться з подвійними лапками.

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


Ваш перший пункт щодо англійської мови не завжди відповідає дійсності і може змінюватися залежно від місцевості / будинку. Друковані матеріали, як правило, використовують одиничні лапки для мовлення, а інші форматування використовують для великих блоків тексту, що цитується. Ваше «розмовне» значення не є корисним визначенням цитат для наголосу. Плюс англійські користувачі взагалі дуже бідні з лапками та апострофами.
Джон Фергюсон

2
@JohnFerguson, тільки з цієї причини, можливо, буде бажано використовувати подвійні лапки, щоб зробити цю диференціацію (між апострофами та цитованими уривками).
користувач1429980

Я весь про прагматизм. Через те, що 1 на 100 рядків, які я набираю або використовую, має подвійні лапки, і багато, багато інших мають апострофи, я використовую подвійні. Зрештою, ви повинні використовувати тип цитат, який 1) вже використовується в проекті, якщо ви новий розробник проекту, або 2) використовувати той, який, на вашу думку, має більше сенсу.
dudewad

Справа в суті - те, що я щойно набрав (є кілька апостроф, немає подвійних лапок;)
dudewad

FWIW - це цитата зі статті Quora: quora.com/…
thetherSide

118

У розділі 7.8.4 специфікації описано буквальне позначення рядка. Єдина відмінність полягає в тому, що DoubleStringCharacter є "SourceCharacter, але не з подвійною цитатами", а SingleStringCharacter є "SourceCharacter, але не одноцитата". Тож єдина різниця може бути продемонстрована таким чином:

'A string that\'s single quoted'

"A string that's double quoted"

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


@Gareth: Я не говорив про технічні характеристики, але говорив про можливий вплив на продуктивність. stackoverflow.com/questions/242813 / ...
Mathias Bynens

якщо ви вкладаєте у свій код достатню кількість апострофів, щоб компенсувати, скільки разів вам потрібно натиснути shift + ', ви робите це неправильно.
SgtPooki

1
Що щодо "{\"name\": \"Peter\"}"vs '{"name": "Peter"}'? Справді, ви можете сказати, що це однакова різниця, але це, безумовно, вплине на ваше рішення іншим чином, ніж наведений вище приклад.
Тревор

@MathiasBynens - Це цікаве спостереження, яке не було актуальним принаймні рік, а може і довгих 6 років.
ArtOfWarfare

4
Потрібно використовувати U + 2019 для апострофа, а не вертикалі з однією цитатою
jjg

95

Одиночні цитати

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

Одиночні цитати:

Без переваг:

Подвійні цитати:


7
Крокфорд зараз віддає перевагу подвійним цитатам.
Адам Калвет Бол

6
airbnb віддає перевагу подвійним котируванням
Сурадж Джайн

15
@SurajJain Джерело? Посібники зі стилів Airbnb та Google досі перераховують одиночний вибір.
Алек Мев

5
@SurajJain Ах, це конфігурація перевірки стилів коду, написана в JSON, яка взагалі не дозволяє одиничні лапки. Читання їх - хороший спосіб порівняння варіантів, зроблених різними проектами.
Алек Мев

2
Зараз Google віддає перевагу одинарним
цитатам

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.

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

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

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

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


25
Якщо в одному браузері трохи швидше зробити це в один бік, а трохи швидше в іншому зробити це в інший спосіб, здається, що єдине керівництво, яке ми можемо відібрати від цього, - це те, що ми повинні робити все, що нам більше подобається, бо це зашкодить деяким Користувачі та допомагають іншим, і різниця, ймовірно, буде непомітна. "Передчасна оптимізація ..." і все таке.
Ендрю Хеджес

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

1
Це дивовижна відповідь, перерва від решти, яка просто щебетає: "Вони \" ті ж, що вони \ "ті ж" ... Ви сказали: "Плюс, в інших мовах програмування вони зазвичай швидші у використанні, ніж подвійні цитати " , чи можу я запитати, які мови? Я використовував звичайні язики, такі як Java та C #, ніколи не бачив жодного іншого, крім JS, який приймає рядкові літерали в єдині лапки. Додатки з однією котировкою зазвичай використовуються лише для символьних констант (дозволено лише одне значення символів).
ADTC

3
AFAIK це було виправлено у Firefox 17, Firefox коли робив декомпіляцію при виконанні, .toStringале тепер він повертає оригінальну копію. Сучасний Firefox не матиме цього питання.
Бенджамін Грюнбаум

3
Не знаю про різницю швидкостей. Але я хотів би зазначити, що "це створює враження, що принаймні один браузер внутрішньо розбирає JavaScript, ніби все написано за допомогою подвійних лапок". - це нісенітниця. Він розділений так, ніби написаний подвійними цитатами. Тобто це перетворило його внутрішнє представлення (яке просто зберігає рядок, а не лапки), у читану людиною версію, для якої трапляється використовувати один набір лапок. Так чи інакше, на думку коментаря Бенджаміна, це все змінилося.
підрозділ

32

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

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

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

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

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


8
Домовились про те, що це, мабуть, погана річ, але якщо це потрібно зробити, я впевнений, що кодування у стилі URL може бути використане, наприклад <a onclick="alert(%22hi%22);">hi</a>- з пам'яті це працює, хоча це може бути замість атрибута href<a href="javascript:alert(%22hi%22);">hi</a>
Graza

2
@PhiLho Ви маєте рацію з цим ... Я припускав, що люди пишуть умовно атрибути HTML з подвійним котируванням, і не збиралися (1) оптом конвертувати все в одиничні лапки, або (2) змішувати і співставляти одиничні та подвійні цитовані атрибути. Але так, ти маєш рацію, це законно
Том Ліанса

4
@Tom Lianza, напевно alert(&quot;hi&quot;), не дійсний JavaScript. Але значення атрибутів кодуються. w3.org/TR/html4/intro/sgmltut.html#didx-attribute
Роберт

4
Тут погоджено з @Robert. &quot;це правильний спосіб уникнути подвійної лапки в атрибуті HTML. Він чудово працює у Firefox. @Denilson, XML (і, отже, XHTML) допускає як одиничні, так і подвійні лапки. Дивіться AttValueлітерал у специфікації XML за адресою w3.org/TR/REC-xml/#d0e888 .
Кріс Кало

1
@Pacener: Тому що це, ей, не помиляється. Існує конвенція в HTML про розміщення атрибутів між подвійними лапками.
Конрад Боровський

30

Технічно немає різниці, це лише питання стилю та умовності.

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

Я особисто дотримуюсь цього.

ОНОВЛЕННЯ: Схоже, містер Крокфорд передумав і тепер рекомендує використовувати подвійні цитати протягом усієї :)


13
Дуглас Крокфорд проти JQuery. Виберіть свою отруту.
Ерік

Які міркування Крокфорда для цього?
BadHorsie

1
Це умова, яку я дотримуюся. Це більше особистісні переваги. Мені подобається використовувати окремі цитовані рядки для внутрішніх речей, таких як селектори jQuery та / або такі речі, як getElementById ('id');, мені просто подобається, як це виглядає з одинарними цитатами. Але перейдіть до подвійних лапок для зовнішнього тексту, оскільки він часто може містити внутрішні лапки в тексті. Крім того, це дозволяє легко помітити та розмежувати зовнішні та внутрішні рядки, якщо ви намагаєтесь знайти помилку в тій чи іншій.
adimauro

3
Станом на квітень 2016 року Дуглас Крокфорд рекомендує використовувати лише подвійні цитати, враховуючи, що на практиці багато розробників вважають внутрішню та зовнішню дихотомію важкою у використанні.
Грім

27

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

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

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

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

19

Давайте подивимося, що робить довідка.

Всередині jquery.js кожен рядок подвійний.

Отже, починаючи з цього часу, я буду використовувати рядки з подвійним цитуванням. (Я використовував сингл!)


11
Чому за це проголосували. Це питання стилю, а найкращий стиль - бути послідовним та слідувати тим, хто вийшов перед вами.
Ерік

2
+1 Документація API jQuery теж. Це було єдиною причиною, коли я погодився на подвійні цитати. Особисто я вважаю, що відповіді на те, що "це зводиться до особистих уподобань" є дещо хибними - найкраще з'ясувати широко використовувану конвенцію та дотримуватися її. А оскільки я, можливо, хочу скопіювати та вставити приклади з jQuery (прямо чи опосередковано), мені не хочеться щоразу замінювати лапки.
Стів Чемберс

2
Можливо, jQuery не зміг слідкувати за людьми перед ними (або насправді не хвилював, як більшість інших експертів). ;)
Джеймс Вілкінс

14

Просто зберігайте послідовність у використанні. Але не варто знижувати рівень комфорту.

"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

13

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

  • Якщо ви кодуєте в компанії чи колективі, то , ймовірно, буде хорошою ідеєю слідувати "стилю будинку".

  • Якщо ви один хакеруєте кілька побічних проектів, то подивіться на декількох видатних лідерів громади. Скажімо, ви потрапляєте в Node.js. Погляньте на основні модулі, наприклад, underscore.js або висловіть, і подивіться, яку умову вони використовують, і подумайте, чи слідкуйте за цим.

  • Якщо обидві конвенції використовуються однаково, то відкладайте свої особисті
    переваги.

  • Якщо у вас немає особистих переваг, то монетка.

  • Якщо у вас немає монети, то пиво на мене;)


13

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

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

Тож я згоден з @ady, але з певною обережністю.

Мій підсумок: У JavaScript, мабуть, це не має значення, але як тільки ви вставите його в HTML або подібне, у вас виникають проблеми. Ви повинні знати, що насправді рятується, читаючи, передаючи рядок.

Простий мій випадок:

tbox.innerHTML = tbox.innerHTML + '<div class="thisbox_des" style="width:210px;" onmouseout="clear()"><a href="https://stackoverflow.com/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>'

Ви можете помітити \ "у третьому полі шоу. Це.

Подвійна цитата не спрацювала!

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

Цей випадок - це дуже проста HTML-версія, помилка була створена простою копією / вставкою коду JavaScript з подвійним котируванням.

Отже, щоб відповісти на питання:

Спробуйте використовувати окремі лапки, перебуваючи в межах HTML. Це може врятувати пару проблем налагодження ...


1
Я зіткнувся з подібною проблемою з інтерполяцією рядків ES6 (backticks). Моя система збірки склала його до подвійного котирування, яке порушило заголовок Auth, який працював з одинарними лапками!
Джей

12

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

Компілятор буде виконувати маніпуляцію з рядком на подвійній котируваній рядку, залишаючи одну цитата, що цитується, буквально недоторканою. Це призводило до «хороших» розробників, які вирішили використовувати одинарні лапки для рядків, які не містять контрольних символів, таких як ( \nабо \0не обробляються в рамках однієї лапки), і подвійних лапок, коли їм потрібен розбитий рядок (з невеликою ціною в циклах процесора для обробка рядка).


14
Справа не в тому, що колись це робилося в один бік, а зараз робиться іншим. Різні мови поводяться з цитатами по-різному, а деякі описуються як ви описуєте. Але це питання JavaScript . Одиночні та подвійні лапки розглядаються однаково в JavaScript (за винятком випадків, коли інший тип цитат може бути використаний у рядку без виходу). Немає питання про подвійні лапки, що дозволяють контролювати символи або інтерполяцію рядків. JavaScript не працює так. Контрольні символи та послідовності втечі працюють однаково, залежно від типу цитати, який ви використовуєте.
Майкл Гірі

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

12

Якщо ви використовуєте jshint , це призведе до помилки, якщо ви використовуєте подвійний рядок цитати.

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

До речі, коли ви обробляєте HTML в JavaScript, простіше використовувати одну цитату:

var foo = '<div class="cool-stuff">Cool content</div>';

І принаймні JSON використовує подвійні лапки для представлення рядків.

Немає тривіального способу відповісти на ваше запитання


Чи змінився jshint реалізації? оскільки демонстраційний веб-сайт, здається, приймає або без викидання будь-яких попереджень / помилок, і я не можу знайти жодних варіантів, щоб обмежити jshint для використання будь-якого. Можливо, ця відповідь застаріла чи неточна?
Lea Hayes

якщо jshint викликає помилку для подвійного цитованого рядка, його серйозно порушено. Стандарт JavaScript визначає, що правильно, а не якийсь зламаний вкладиш.
Mecki

10

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

Якщо говорити про швидкість кодування, якщо ви використовуєте 'для розмежування рядка, вам потрібно буде уникати "лапок. Вам, швидше за все, потрібно буде використовувати "всередині рядка, наприклад:

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

Тоді я вважаю за краще використовувати 'для розмежування рядка, тому мені доводиться уникати менше символів.


10

Однією (нерозумною) причиною використання одиничних лапок було б те, що вони не вимагають від вас натискати клавішу Shift, щоб ввести їх, тоді як подвійна цитата - це. (Я припускаю, що середній рядок не вимагає проходження, що є розумним припущенням.) Тепер, припустимо, щодня я кодую 200 рядків коду. Можливо, у цих 200 рядків у мене 30 цитат. Можливо, набір подвійної лапки займає на 0,1 секунди більше часу, ніж набір однієї цитати (тому що я повинен натиснути клавішу зсуву). Тоді в будь-який день я витрачаю 3 секунди. Якщо я кодую таким чином 200 днів на рік протягом 40 років, то я витратив 6,7 годин свого життя. Їжа для роздумів.


1
Я думаю, тут ви маєте на увазі лише англійську розкладку клавіатури ... У мене є німецька, я повинен натиснути зміну для обох. У всякому разі, я не бачу, чому натискання клавіші shift додає час процесу. Я натискаю зрушення лівою рукою, а правою натискаю клавішу цитати. Це відбувається одночасно, для мене різниці немає.
Codewandler

1
@codewandler Існує ще вартість НЕ потрібно натискати клавішу перемикання , навіть якщо ви можете натиснути її паралельно з ключем "Це змушує вас поворухнутися від своєї позиції по замовчуванням Наприклад, припустимо , що ви друкуєте: .. var description = "This is a \"quick\" test";на англійська клавіатура. Для англійської клавіатури ваш рожевий палець повинен переміщатися від лівої клавіші зсуву до клавіші Q у верхньому рядку, а не переходити від клавіші А. до клавіші Q. Іншими словами, він повинен пройти двічі відстань Я не впевнений, де є клавіші на німецькій клавіатурі, але я впевнений, що є аналогічний приклад.
Джон Курлак

2
@codewandler Крім того, необхідність набрати shift, навіть якщо я можу це зробити паралельно, не дозволяє лівому пальцевому пальцю підготуватися до введення наступного символу після "у що б ви не друкували"
Джон Курлак

1
Ідея "витрачати час" трохи нерозумна, але думка про менш ергономічне напруження (особливо в епоху синдрому карпельного тунелю тощо) робить його приємним надбанням, особливо у випадках, коли це не має значення. Враховуючи понад 1000 рядків коду на день, це може врятувати сотні щоденних рожевих вигинів.
Bejjor

9

Вивчення плюсів і мінусів

На користь єдиних цитат

  • Менше зорового скупчення.
  • Генерування 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 тощо) є одноцитовані рядкові літерали, але вхідні дані не інтерпретуються всередині них. C та Java використовують подвійні лапки для рядків та одинарні лапки для символів.
  • Якщо ви хочете, щоб код був дійсним JSON, вам потрібно використовувати подвійні лапки.

На користь обох

У JavaScript немає різниці. Тому ви можете використовувати все, що зручно на даний момент. Наприклад, усі наступні літеральні рядки створюють один і той же рядок:

    "He said: \"Let's go!\""
    'He said: "Let\'s go!"'
    "He said: \"Let\'s go!\""
    'He said: \"Let\'s go!\"'

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


8

Ще одна річ, яку ви можете розглянути як причину переходу від подвійних лапок до одинарних лапок, - це збільшення популярності серверних скриптів. Під час використання PHP ви можете передавати змінні та аналізувати функції javascript, використовуючи рядки та змінні в PHP.

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

Приклад: мені потрібно запустити функцію javascript за допомогою змінної з мого сервера.

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

Це економить мені багато клопоту з тим, щоб мати справу з об'єднанням рядків, і я можу ефективно викликати javascript від PHP. Це лише один приклад, але це може бути однією з декількох причин, через які програмісти дефолтують до єдиних лапок в JavaScript.

Цитата з документів PHP : "Найважливішою особливістю рядків з подвійним цитуванням є те, що імена змінних будуть розширені. Деталі див. Для аналізу рядків."


+1, я роблю це у своєму проекті MVC.Net, щоб подвійні лапки з C # не заважали єдиним цитатам з JavaScript, і навпаки.
DCShannon

3
Я думаю, якщо ви пишете JavaScript на свою сторінку методом класу PHP, у вас є більші проблеми.
BadHorsie

6

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

Головне - подивитися, які лапки (подвійні чи одиничні) ви використовуєте всередині рядка. Це допомагає утримати кількість втеч низькою. Наприклад, коли ви працюєте з html всередині своїх рядків, простіше використовувати одинарні лапки, щоб вам не довелося уникати всіх подвійних лапок навколо атрибутів.


Хоча атрибути можуть бути так само оточені одинарними цитатами :)
Дамір Зекич

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

6

Я використовував би подвійні лапки, коли одиничні лапки не можна використовувати, і навпаки:

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

Замість:

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

Що про рядок, що містить як одну цитату, так і подвійну цитату, як О'реа "lly
sudhAnsu63

6

Немає різниці між одинарними та подвійними лапками в JavaScript.

Важлива специфікація:

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

Це як тест, якщо

a=b;

швидше, ніж

a = b;

(додаткові місця)

сьогодні у конкретному браузері та платформі тощо.


2
без пробілів швидше. менше символів для розбору в рядку. : p
pilavdzice

6

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

"This is my #{name}"

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

`This is my ${name}`

Для мене зворотний галочок - явний переможець у цьому конкурсі, (майже) відсутність загальних текстових рядків, плюс інтерполяція var
Сімоне Поггі

5

Якщо ви стрибаєте вперед між JavaScript і C #, то краще навчити пальці для загальної конвенції, яка є подвійними цитатами.


5

Я працював наступним приблизно 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));

31
По-іншому, ви виявили, що пізніший код працює найшвидше. Це проблема при виконанні мікро-орієнтирів. Вам доведеться враховувати двигун JS, що оптимізує код під час його роботи. (Цей самий ефект ви побачите при порівняльному оцінці Java через те, як працює JIT.)
Девід Філліпс

4
Перша нова дата повільна, додайте var dummy_date = new Date()до початку
Лаурі

1
Рівень мікрооптимізації тут настільки нерозумний, що ви також можете стверджувати, що одинарні лапки швидше набираються, що призводить до швидшого розвитку.
Beejor

4

Різниці суворо немає, тому це, головним чином, питання смаку і того, що є в рядку (або якщо код JS сам по собі в рядку), щоб кількість втеч залишалася низькою.

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


І Рубі, можу додати. Python має таку саму поведінку, що і JavaScript: різниці між одинарними / подвійними лапки не робиться.
Дамір Зекич

4

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


Чи знаєте ви, чому це робить?
ma11hew28

Не знаю. Можливо, це умова кодування і нічого особливого.
Мохсен

4

Тепер, коли настає 2020 рік, ми повинні розглянути третій варіант для Javascript: Єдиний підхід для всього.

Це можна використовувати скрізь замість одиничних чи подвійних лапок.

Це дозволяє робити все!

  1. Вставте в нього одинарні лапки: "Це здорово!"
  2. Вставте у нього подвійні лапки: "Це" справді "чудово!"
  3. Використовуйте рядкову інтерполяцію: "Це" $ {краще} ", ніж чудово!"
  4. Він дозволяє кілька рядків: `

    Це

    Робить

    Javascript

    Краще!

    `

Він також не спричиняє втрати продуктивності при заміні двох інших: https://medium.com/javascript-in-plain-english/are-backticks-slower-than-other-strings-in-javascript-ce4abf9b9fa


3

Якщо джерелом вашого 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

Просто додати свої 2 центи: Коли я працював як з JS, так і з PHP кілька років тому, я звик використовувати одинарні лапки, щоб я міг вводити символ втечі ('\') без необхідності також уникати цього. Зазвичай я використовував це під час введення необроблених рядків із шляхами до файлів тощо ( http://en.wikipedia.org/wiki/String_literal#Raw_strings )

Так чи інакше, моя умова перетворилася на використання одинарних лапок на необмежених рядках типу ідентифікатора, таких як if (typeof s == 'string') ...(у яких символи втечі ніколи не використовуються) та подвійних лапок для текстів , таких як "Ей, що сталося?". Я також використовую одиночні лапки в коментарях як типографічну умову для показу ідентифікаційних імен. Це просто велике правило, і я вимикаю лише в разі потреби, наприклад, під час введення рядків HTML '<a href="#"> like so <a>'(хоча ви також можете змінити цитати тут). Я також усвідомлюю, що у випадку JSON для імен використовуються подвійні лапки, але поза цим, я особисто віддаю перевагу одинарним лапкам, коли в тексті між цитатами ніколи не потрібні тексти - наприклад document.createElement('div').

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.