Are double and single quotes interchangeable in JavaScript?

Asked 2023-09-20 20:34:23 View 934,529

Consider the following two alternatives:

  • console.log("double");
  • console.log('single');

The former uses double quotes around the string, whereas the latter uses single quotes around the string.

I see more and more JavaScript libraries out there using single quotes when handling strings.

Are these two usages interchangeable? If not, is there an advantage in using one over the other?

Answers

The most likely reason for use of single vs. double in different libraries is programmer preference and/or API consistency. Other than being consistent, use whichever best suits the string.

Using the other type of quote as a literal:

alert('Say "Hello"');
alert("Say 'Hello'");

This can get complicated:

alert("It's \"game\" time.");
alert('It\'s "game" time.');

Another option, new in ECMAScript 6, is template literals which use the backtick character:

alert(`Use "double" and 'single' quotes in the same string`);
alert(`Escape the \` back-tick character and the \${ dollar-brace sequence in a string`);

Template literals offer a clean syntax for: variable interpolation, multi-line strings, and more.

Note that JSON is formally specified to use double quotes, which may be worth considering depending on system requirements.

Answered   2023-09-20 20:34:23

  • An important point to note with all code conventions - Define it once and stick with it. IOW, don't use double quotes someplace and single quotes elsewhere. - anyone
  • @Cerebrus - I think flexibility is OK with this one. Sure pick a preferred style, but if you need to break away from the style to save escaping lots of quotes in one string. I'd be OK with that. - anyone
  • I don't think there's any reason to have to be consistent about it. There's no advantage to either one, and I don't think the readability is really affected whether or not you use ' in one place and " in another. - anyone
  • A little off-topic, but if people used correct typography, a lot of these discussions about escaping would be obsolete: alert('It’s “game” time') vs. alert("It’s “game” time") – doesn’t matter. You would only need to escape in the (rare) cases where the single or double prime sign ', " is actually appropriate. - anyone
  • @strix25 Single and double quotes are both a single character and will result in the same file size. However it's possible to reduce file size if one results in fewer escaped characters. But unless you're doing something like writing uncompressed unminified script to run on cheap/old hardware, it's negligible. - anyone

If you're dealing with JSON, it should be noted that strictly speaking, JSON strings must be double quoted. Sure, many libraries support single quotes as well, but I had great problems in one of my projects before realizing that single quoting a string is in fact not according to JSON standards.

Answered   2023-09-20 20:34:23

  • This is very relevant when working with jQuery.ajax calling into an ASP.NET service (Web Service, Page Method, or MVC). - anyone
  • The property names within the JSON strings must be double-quoted, but a JSON string as a whole can be single-quoted: var jsonString = '{"key1":"value1"}'; (Not that I recommend manually building JSON.) - anyone
  • You shouldn't write JSON by hand if you can .stringify() it. - anyone
  • This is also relevant when working with multiple languages where nearly all other lanuguages (Java, C, C++, ...) use double quotes for strings and single quotes for chars. I prefer to use the same quoting across the board and so stick with double quotes for JS. With years of touch typing the extra key to shift for double quotes is entirely irrelevant, and if your coding is constrained by your typing then you need to practice typing properly. - anyone
  • @mister270: json.org Specifically, the definition of a string, "A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes." - anyone

There is no one better solution; however, I would like to argue that double quotes may be more desirable at times:

  • Newcomers will already be familiar with double quotes from their language. In English, we must use double quotes " to identify a passage of quoted text. If we were to use a single quote ', the reader may misinterpret it as a contraction. The other meaning of a passage of text surrounded by the ' indicates the 'colloquial' meaning. It makes sense to stay consistent with pre-existing languages, and this may likely ease the learning and interpretation of code.
  • Double quotes eliminate the need to escape apostrophes (as in contractions). Consider the string: "I'm going to the mall", vs. the otherwise escaped version: 'I\'m going to the mall'.
  • Double quotes mean a string in many other languages. When you learn a new language like Java or C, double quotes are always used. In Ruby, PHP and Perl, single-quoted strings imply no backslash escapes while double quotes support them.

  • JSON notation is written with double quotes.

Nonetheless, as others have stated, it is most important to remain consistent.

Answered   2023-09-20 20:34:23

  • Your first point about English language is not always true and can change depending on the locality/house convention. Printed materials typically use single-quotes for speech and use other formatting for large blocks of quoted text. Your 'colloquial' meaning is not a useful definition of quotes for emphasis. Plus English users are in general very poor with quotation marks and apostrophes. - anyone
  • @JohnFerguson, for that reason alone, it may be desirable to use double-quotes so as to make that differentiation (between apostrophes and quoted passages). - anyone
  • I'm all about pragmatism. Due to the fact that 1 in 100 strings that I type or uses has double quotes, and many, many more have apostrophes, I use doubles. At the end of the day, though, you should use the quote type that's 1) already in use in the project if you're a new developer to the project, or 2) use the one that you think makes more sense. - anyone
  • Case in point-- what I just typed (there are multiple apostrophes, no double quotes ;) - anyone
  • To add to @user1429980's third point, single quotes denotes a different datatype in Java and C. - anyone

Section 7.8.4 of the specification describes literal string notation. The only difference is that DoubleStringCharacter is "SourceCharacter but not double-quote" and SingleStringCharacter is "SourceCharacter but not single-quote". So the only difference can be demonstrated thusly:

'A string that\'s single quoted'

"A string that's double quoted"

So it depends on how much quote escaping you want to do. Obviously the same applies to double quotes in double quoted strings.

Answered   2023-09-20 20:34:23

  • @Gareth: I wasn't talking about specifications though, I was talking about possible performance impact. stackoverflow.com/questions/242813/… - anyone
  • if you're putting enough apostrophes in your code to make up for how many times you need to hit shift+' then you're doing it wrong. - anyone
  • What about "{\"name\": \"Peter\"}" vs '{"name": "Peter"}'? Admittedly, you could say this is the same difference, but it would certainly affect your decision in a different way than the example above. - anyone
  • @MathiasBynens - That's an interesting observation that hasn't been relevant for at least a year, and maybe as long as 6 years. - anyone
  • One should use U+2019 for an apostrophe, not a vertical-single-quote - anyone

I'd like to say the difference is purely stylistic, but I'm really having my doubts. Consider the following example:

/*
    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);

In Safari, Chrome, Opera, and Internet Explorer (tested in Internet Explorer 7 and Internet Explorer 8), this will return the following:

function () {
    return this.replace(/^\s+|\s+$/g, '');
}
function trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}

However, Firefox will yield a slightly different result:

function () {
    return this.replace(/^\s+|\s+$/g, "");
}
function trim(str) {
    return str.replace(/^\s+|\s+$/g, "");
}

The single quotes have been replaced by double quotes. (Also note how the indenting space was replaced by four spaces.) This gives the impression that at least one browser parses JavaScript internally as if everything was written using double quotes. One might think, it takes Firefox less time to parse JavaScript if everything is already written according to this 'standard'.

Which, by the way, makes me a very sad panda, since I think single quotes look much nicer in code. Plus, in other programming languages, they're usually faster to use than double quotes, so it would only make sense if the same applied to JavaScript.

Conclusion: I think we need to do more research on this.

This might explain Peter-Paul Koch's test results from back in 2003.

It seems that single quotes are sometimes faster in Explorer Windows (roughly 1/3 of my tests did show a faster response time), but if Mozilla shows a difference at all, it handles double quotes slightly faster. I found no difference at all in Opera.

2014: Modern versions of Firefox/Spidermonkey don’t do this anymore.

Answered   2023-09-20 20:34:23

  • If it's slightly faster in one browser to do it one way and slightly faster in another to do it the other way, it seems like the only guidance we can take away from that is that we should do whatever we like more because it will hurt some users and help others, and the amount of difference is likely to be imperceptible. "Premature optimization..." and all that. - anyone
  • I'm sorry my comment was not more constructive. I'm only saying that how the browser chooses to display its internal representation of the syntax probably has very little to do with how it is parsed and therefore probably isn't a reason to prefer one type of quotes over the other. Performance data comparing parse times for single and double quotes across browsers, on the other hand, would be more compelling. - anyone
  • This is an awesome answer, a break from the rest that just chirp 'They\'re the same they\'re the same'... You said "Plus, in other programming languages, they're usually faster to use than double quotes", May I ask which languages? I have used regular langs like Java and C#, never seen one other than JS that accepts string literals in single quotes. The single quote enclosures are usually used only for character constants (only one char allowed). - anyone
  • AFAIK this was fixed in Firefox 17, Firefox used to do decompilation when doing .toString but now it returns the original copy. Modern firefox will not have this issue. - anyone
  • Don't know about speed differences. But I'd like to note that "This gives the impression that at least one browser parses JavaScript internally as if everything was written using double quotes." is nonsense. It UNparsed as if written with double quotes. That is it turned its internal representation (which just stores the string, not the quotes) into an human readable version, for which it happens to use one set of quotes. Anyhow, this seems to have changed, as per Benjamin's comment. - anyone

If you're doing inline JavaScript (arguably a "bad" thing, but avoiding that discussion) single quotes are your only option for string literals, I believe.

E.g., this works fine:

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

But you can't wrap the "hi" in double quotes, via any escaping method I'm aware of. Even &quot; which would have been my best guess (since you're escaping quotes in an attribute value of HTML) doesn't work for me in Firefox. " won't work either because at this point you're escaping for HTML, not JavaScript.

So, if the name of the game is consistency, and you're going to do some inline JavaScript in parts of your application, I think single quotes are the winner. Someone please correct me if I'm wrong though.

Answered   2023-09-20 20:34:23

  • Agreed about being arguably a bad thing, however if it must be done, I'm pretty sure URL-style encoding can be used eg <a onclick="alert(%22hi%22);">hi</a> - from memory this works, though it may have been in the href attribute instead <a href="javascript:alert(%22hi%22);">hi</a> - anyone
  • @Robert I'm impressed that works. Obviously that is not valid JavaScript... if you were to run it in any interpreter other than a browser, it would be a syntax error. But, interesting anyhow. - anyone
  • @Tom Lianza, surely alert(&quot;hi&quot;) is not valid JavaScript. But values of attributes are encoded. w3.org/TR/html4/intro/sgmltut.html#didx-attribute - anyone
  • In HTML, using single-quotes is also allowed. However, in XML (and XHTML), double-quotes must be used for attributes. That's why people (myself included) usually use only double-quotes for attributes. - anyone
  • Agreed with @Robert here. &quot; is the correct way to escape a double quote inside of an HTML attribute. It works fine in Firefox. @Denilson, XML (and therefore XHTML) allows both single and double quotes. See the AttValue literal in the XML spec at w3.org/TR/REC-xml/#d0e888. - anyone

Technically there's no difference. It's only matter of style and convention.

Douglas Crockford1 recommends using double quotes.

I personally follow that.

Answered   2023-09-20 20:34:23

Strictly speaking, there is no difference in meaning; so the choice comes down to convenience.

Here are several factors that could influence your choice:

  • House style: Some groups of developers already use one convention or the other.
  • Client-side requirements: Will you be using quotes within the strings? (See Ady's answer.)
  • Server-side language: VB.NET people might choose to use single quotes for JavaScript so that the scripts can be built server-side (VB.NET uses double-quotes for strings, so the JavaScript strings are easy to distinguished if they use single quotes).
  • Library code: If you're using a library that uses a particular style, you might consider using the same style yourself.
  • Personal preference: You might think one or other style looks better.

Answered   2023-09-20 20:34:23

Just keep consistency in what you use. But don't let down your comfort level.

"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

ECMAScript 6 update

Using template literal syntax.

`Be "my" guest. You're in complete freedom.`; // Most comfort :D

Answered   2023-09-20 20:34:23

I hope I am not adding something obvious, but I have been struggling with Django, Ajax, and JSON on this.

Assuming that in your HTML code you do use double quotes, as normally should be, I highly suggest to use single quotes for the rest in JavaScript.

So I agree with ady, but with some care.

My bottom line is:

In JavaScript it probably doesn't matter, but as soon as you embed it inside HTML or the like you start to get troubles. You should know what is actually escaping, reading, passing your string.

My simple case was:

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>'

You can spot the ' in the third field of showThis.

The double quote didn't work!

It is clear why, but it is also clear why we should stick to single quotes... I guess...

This case is a very simple HTML embedding, and the error was generated by a simple copy/paste from a 'double quoted' JavaScript code.

So to answer the question:

Try to use single quotes while within HTML. It might save a couple of debug issues...

Answered   2023-09-20 20:34:23

  • I ran into a similar problem with ES6 string interpolation (backticks). My build system compiled it to a double-quoted string, which broke an Auth header that had been working with single quotes! - anyone

It's mostly a matter of style and preference. There are some rather interesting and useful technical explorations in the other answers, so perhaps the only thing I might add is to offer a little worldly advice.

  • If you're coding in a company or team, then it's probably a good idea to follow the "house style".

  • If you're alone hacking a few side projects, then look at a few prominent leaders in the community. For example, let's say you getting into Node.js. Take a look at core modules, for example, Underscore.js or express and see what convention they use, and consider following that.

  • If both conventions are equally used, then defer to your personal preference.

  • If you don't have any personal preference, then flip a coin.

  • If you don't have a coin, then beer is on me ;)

Answered   2023-09-20 20:34:23

I am not sure if this is relevant in today's world, but double quotes used to be used for content that needed to have control characters processed and single quotes for strings that didn't.

The compiler will run string manipulation on a double quoted string while leaving a single quoted string literally untouched. This used to lead to 'good' developers choosing to use single quotes for strings that didn't contain control characters like \n or \0 (not processed within single quotes) and double quotes when they needed the string parsed (at a slight cost in CPU cycles for processing the string).

Answered   2023-09-20 20:34:23

  • It's not that things used to be done one way and now they are done another. Different languages handle quotes differently, and some work as you describe. But this is a JavaScript question. Single and double quotes are treated identically in JavaScript (except for allowing the other type of quote to be used in a string without escaping). There is no question of double quotes allowing control characters or string interpolation. JavaScript doesn't work like that. Control characters and escape sequences work the same whichever type of quote you use. - anyone

If you are using JSHint, it will raise an error if you use a double quoted string.

I used it through the Yeoman scafflholding of AngularJS, but maybe there is somehow a manner to configure this.

By the way, when you handle HTML into JavaScript, it's easier to use single quote:

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

And at least JSON is using double quotes to represent strings.

There isn't any trivial way to answer to your question.

Answered   2023-09-20 20:34:23

  • Has the implementation jshint changed? since the demo website seems to accept either without throwing any warnings/errors and I cannot find any options to constrain jshint to use either. Perhaps this answer is outdated or inaccurate? - anyone
  • if jshint raises an error for a double quoted string, its seriously broken. The JavaScript standard defines what is correct and not some broken linter. - anyone

There isn't any difference between single and double quotes in JavaScript.

The specification is important:

Maybe there are performance differences, but they are absolutely minimum and can change any day according to browsers' implementation. Further discussion is futile unless your JavaScript application is hundreds of thousands lines long.

It's like a benchmark if

a=b;

is faster than

a = b;

(extra spaces)

today, in a particular browser and platform, etc.

Answered   2023-09-20 20:34:23

  • without spaces is faster. less characters to parse in the string. :p - anyone
  • @pilavdzice: Yes, but is it significant? Is it only 0.0057% faster? - anyone
  • At the end, it can be done with Webpack or alike before shipping to production (during the build), no need to have that kind of reasoning while coding. :D - anyone

Examining the pros and cons

In favor of single quotes

  • Less visual clutter.
  • Generating HTML: HTML attributes are usually delimited by double quotes.

elem.innerHTML = '<a href="' + url + '">Hello</a>';
However, single quotes are just as legal in HTML.

elem.innerHTML = "<a href='" + url + "'>Hello</a>";

Furthermore, inline HTML is normally an anti-pattern. Prefer templates.

  • Generating JSON: Only double quotes are allowed in JSON.

myJson = '{ "hello world": true }';

Again, you shouldn’t have to construct JSON this way. JSON.stringify() is often enough. If not, use templates.

In favor of double quotes

  • Doubles are easier to spot if you don't have color coding. Like in a console log or some kind of view-source setup.
  • Similarity to other languages: In shell programming (Bash etc.), single-quoted string literals exist, but escapes are not interpreted inside them. C and Java use double quotes for strings and single quotes for characters.
  • If you want code to be valid JSON, you need to use double quotes.

In favor of both

There is no difference between the two in JavaScript. Therefore, you can use whatever is convenient at the moment. For example, the following string literals all produce the same string:

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

Single quotes for internal strings and double for external. That allows you to distinguish internal constants from strings that are to be displayed to the user (or written to disk etc.). Obviously, you should avoid putting the latter in your code, but that can’t always be done.

Answered   2023-09-20 20:34:23

  • Re "inline HTML": Do you mean "inline JavaScript"? - anyone
  • @PeterMortensen I believe they are referring to injecting HTML "in line" while writing JavaScript, rather than referring to injecting JavaScript inside an HTML line. - anyone

Talking about performance, quotes will never be your bottleneck. However, the performance is the same in both cases.

Talking about coding speed, if you use ' for delimiting a string, you will need to escape " quotes. You are more likely to need to use " inside the string. Example:

// JSON Objects:
var jsonObject = '{"foo":"bar"}';

// HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';

Then, I prefer to use ' for delimiting the string, so I have to escape fewer characters.

Answered   2023-09-20 20:34:23

There are people that claim to see performance differences: old mailing list thread. But I couldn't find any of them to be confirmed.

The main thing is to look at what kind of quotes (double or single) you are using inside your string. It helps to keep the number of escapes low. For instance, when you are working with HTML content inside your strings, it is easier to use single quotes so that you don't have to escape all double quotes around the attributes.

Answered   2023-09-20 20:34:23

  • Though attributes can be as well surrounded with single quotes :) - anyone
  • Your right, I thought that xml and xhtml prescribed double quotes surrounding attributes, but single quotes are allowed to. - anyone

When using CoffeeScript I use double quotes. I agree that you should pick either one and stick to it. CoffeeScript gives you interpolation when using the double quotes.

"This is my #{name}"

ECMAScript 6 is using back ticks (`) for template strings. Which probably has a good reason, but when coding, it can be cumbersome to change the string literals character from quotes or double quotes to backticks in order to get the interpolation feature. CoffeeScript might not be perfect, but using the same string literals character everywhere (double quotes) and always be able to interpolate is a nice feature.

`This is my ${name}`

Answered   2023-09-20 20:34:23

  • To me the back tick is a clear winner in this contest, (almost) no presence inside common text strings, plus var interpolation - anyone

I would use double quotes when single quotes cannot be used and vice versa:

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

Instead of:

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

Answered   2023-09-20 20:34:23

  • What about a string containing both single quote and double quote like O'rea"lly - anyone

There is strictly no difference, so it is mostly a matter of taste and of what is in the string (or if the JavaScript code itself is in a string), to keep number of escapes low.

The speed difference legend might come from PHP world, where the two quotes have different behavior.

Answered   2023-09-20 20:34:23

  • And Ruby, I may add. Python has the same behavior as JavaScript: no difference is made between single/double quotes. - anyone
  • Douglas Crockford thinks we should get rid of the single quote. - anyone
  • Well, some years later, we use single quotes everywhere in our JS (actually TS) code (ou backticks, of course). That mix well with double quotes used in HTML, when you have a JS/TS code in a template (eg. in Angular). - anyone

The difference is purely stylistic. I used to be a double-quote Nazi. Now I use single quotes in nearly all cases. There's no practical difference beyond how your editor highlights the syntax.

Answered   2023-09-20 20:34:23

  • No practical difference? Can you prove it? - anyone
  • The burden of proof is on the guy asserting there's a difference when the language doesn't. - anyone
  • Wisdom; the language doesn't specify a difference, which means there is no syntactical difference. However, there seems to be a cross-browser difference which appears to indicate performance implications: stackoverflow.com/questions/242813/… People saying it doesn't matter what quotes you use, are talking about syntax. I'm talking about practical implementation in different browsers. - anyone
  • I read your comment on that other thread. Are you serious? How much faster is JavaScript that uses double quotes? 0.00001 second per line? I think the burden of proof is on you to show a test where it matters in any significant way whether one uses double or single quotes. "One might think" isn't evidence. By the way, I used to always use double quotes until I noticed that all of the JavaScript in Apple Dashboard widgets is single quoted. If it's good enough for Apple... - anyone

You can use single quotes or double quotes.

This enables you for example to easily nest JavaScript content inside HTML attributes, without the need to escape the quotes. The same is when you create JavaScript with PHP.

The general idea is: if it is possible use such quotes that you won't need to escape.

Less escaping = better code.

Answered   2023-09-20 20:34:23

In addition, it seems the specification (currently mentioned at MDN) doesn't state any difference between single and double quotes except closing and some unescaped few characters. However, template literal (` - the backtick character) assumes additional parsing/processing.

A string literal is 0 or more Unicode code points enclosed in single or double quotes. Unicode code points may also be represented by an escape sequence. All code points may appear literally in a string literal except for the closing quote code points, U+005C (REVERSE SOLIDUS), U+000D (CARRIAGE RETURN), and U+000A (LINE FEED). Any code points may appear in the form of an escape sequence. String literals evaluate to ECMAScript String values...

Source: https://tc39.es/ecma262/#sec-literals-string-literals

Answered   2023-09-20 20:34:23