什么时候在JavaScript中使用双引号或单引号?


1968

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

我看到越来越多的JavaScript库在处理字符串时使用单引号。是什么原因导致一个人又一个人使用?我认为它们几乎可以互换。


125
哪个更容易阅读?alert(“是游戏时间”); 或警报(“这是游戏时间”);
瑞安·米勒

591
这个瑞安怎么样?alert("It's \"game\" time.");还是alert('It\'s "game" time.');
Francisc

37
如果始终使用单引号,而在文字包含单引号的情况下偶尔使用双引号,那么我们将不得不键入少得多的移位按钮,而我们的左手小指将会给我们带来祝福。但是,是的,正如@arne所说,对于JSON应该使用双引号。
IsmailS 2011年

9
当您使用欧洲键盘时,单引号更容易做到(双引号是Shift + 2,不如用右手的小手指方便地敲击单个键那样甜美)。
Arne 2012年

38
@Arne没有“欧洲键盘”之类的东西。例如,德语键盘要求两种引号都需要移动。(但单引号更容易。)
ANeves 2012年

Answers:


1221

在不同的库中使用单一或双重的最可能原因是程序员的喜好和/或API一致性。除了保持一致之外,请使用最适合该字符串的那个。

使用其他类型的引号作为文字:

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

这可能会变得复杂:

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

ES6中的另一个新选项是使用以下字符的Template文字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,不要在某些地方使用双引号,而在其他地方使用单引号。
Cerebrus

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服务(Web服务,页面方法或MVC)时,这非常相关。
Schmuli 2011年

100
属性名称的JSON字符串必须加双引号,而是一个JSON字符串作为一个整体可以是单引号:var jsonString = '{"key1":"value1"}';(不,我建议手动构建JSON)
NNNNNN

51
如果可以的话,您不应该手工编写JSON .stringify()
卡米洛·马丁

23
对于总是使用双引号的情况,这里的正确之处是最好的说法。JSON应该带有双引号。其他答案大多是建议“保持一致”,这意味着如果该语言的任何部分实际上可能会强制使用双引号,则应始终使用该双引号。
来自Qaribou的Josh,2014年

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,仅出于这个原因,可能希望使用双引号来区分(撇号和引用的段落之间)。
user1429980

我全都讲实用主义。由于我键入或使用的字符串中每100个字符串中有1个带有双引号,并且许多字符串中都带有撇号,因此我使用双打。不过,归根结底,如果您是该项目的新开发人员,则应该使用以下报价类型:1)如果您是该项目的新开发人员,或者2)使用您认为更有意义的报价类型。
dudewad

恰当的例子-我刚刚键入的内容(有多个撇号,没有双引号;)
dudewad

FWIW -这是从Quora的文章报价:quora.com/...
theUtherSide

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/...
马蒂亚斯Bynens

如果您在代码中添加了足够的撇号来弥补需要按shift +'的次数,那么您就做错了。
SgtPooki 2014年

1
怎么样"{\"name\": \"Peter\"}"VS '{"name": "Peter"}'?诚然,您可以说这是相同的区别,但是它肯定会以与上述示例不同的方式影响您的决定。
Trevor

@MathiasBynens-这是一个有趣的观察,至少一年,甚至长达六年都没有发生。
ArtOfWarfare 2015年

4
应该将U + 2019用作撇号,而不是垂直单引号
jjg

95

单引号

我希望双引号是标准的,因为它们的含义要多一些,但是我继续使用单引号是因为它们在场景中占主导地位。

单引号:

没有偏好:

双引号:


7
克罗克福德现在更喜欢双引号。
亚当·卡尔维·博尔

6
airbnb现在更喜欢双引号
Suraj Jain

15
@SurajJain来源?AirbnbGoogle风格指南仍然将“ single”作为首选。
亚历克·梅夫

5
@SurajJain啊,这些是用JSON编写的代码样式检查器配置,根本不允许单引号。阅读它们是比较不同项目所做选择的一种好方法。
亚历克·梅夫

2
谷歌现在更喜欢单引号
GabrielOshiro

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年的测试结果

似乎在Explorer Windows 中有时单引号有时会更快(大约有1/3的测试确实显示了更快的响应时间),但是如果Mozilla完全不同,则处理双引号的速度会稍快。我发现Opera中没有任何区别。

编辑2014年: Firefox / Spidermonkey的现代版本不再这样做。


25
如果在一种浏览器中以一种方式执行该操作稍快一些,而在另一种方式以另一种方式执行该操作中稍快一些,则似乎唯一可以避免的指导意见是我们应该做更多的事情,因为这会损害某些功能。用户和帮助他人,差异的数量很可能难以察觉。“过早的优化...”等等。
安德鲁·赫奇斯

2
对不起,我的评论没有更具建设性。我只是在说,浏览器如何选择显示其语法的内部表示形式可能与语法的解析方式无关,因此,可能不是选择一种引号而不是另一种引号的原因。另一方面,比较跨浏览器的单引号和双引号的解析时间的性能数据将更具吸引力。
克里斯·卡洛

1
这是一个了不起的答案,与其他代码不同,只是chi叫“它们相同,它们相同”。...您说:“另外,在其他编程语言中,它们的使用速度通常比双倍要快引号”,请问哪种语言?我曾经使用过像Java和C#这样的常规lang,除了JS从来没有见过其他接受单引号中的字符串文字的lang。单引号括起来通常仅用于字符常量(仅允许使用一个字符)。
ADTC

3
AFAIK在Firefox 17中已修复此问题,Firefox在执行此操作时曾经进行反编译,.toString但现在它返回原始副本。现代Firefox不会有这个问题。
Benjamin Gruenbaum 2014年

3
不知道速度差异。但我想指出:“这给人的印象是,至少有一个浏览器在内部解析JavaScript,就好像所有内容都是使用双引号编写的。” 废话 解析时好像用双引号引起来。就是说,它将其内部表示形式(仅存储字符串,而不是引号)转换为易于阅读的版本,为此它恰好使用了一组引号。无论如何,根据本杰明的评论,这似乎已经改变。
2014年

32

我相信,如果您正在执行内联JavaScript(可以说是“坏”事情,但避免了讨论),则引号是字符串文字的唯一选择。

例如,这很好用:

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

但是您无法通过我知道的任何转义方法将“ hi”用双引号引起来。即使&quot;这是我最好的猜测(因为您在HTML的属性值中转义了引号)在Firefox中对我也不起作用。 \"也不起作用,因为此时您正在转义HTML,而不是JavaScript。

因此,如果游戏的名称是一致的,并且您将在应用程序的某些部分中使用一些内联JavaScript,则我认为单引号是赢家。如果我错了,请有人纠正我。


8
同意可以说是一件坏事,但是,如果必须这样做,我很确定可以使用URL样式的编码,例如<a onclick="alert(%22hi%22);">hi</a>-从内存来看,这是<a href="javascript:alert(%22hi%22);">hi</a>
可行的

2
@PhiLho,您是对的...我以为人们在编写传统上用双引号引起来的HTML属性,并且不会(1)将所有内容全部转换为单引号,或者(2)混合匹配单引号和双引号属性。但是,是的,您是对的,这是合法的
Tom Lianza 2011年

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)允许单引号和双引号。请参阅AttValueXML规范中的文字,网址w3.org/TR/REC-xml/#d0e888
克里斯·卡洛

1
@Pacener:因为,嗯,没错。HTML中有一个约定,将属性放在双引号之间。
Konrad Borowski14年

30

从技术上讲,没有区别,只是样式和约定。

Douglas Crockford建议对内部字符串使用单引号,对外部字符串使用双引号(“外部”是指要显示给应用程序用户的信息,例如消息或警报)。

我个人遵循。

更新:似乎克罗克福德先生改变了主意,现在建议在整个过程中使用双引号:)


13
道格拉斯·克罗克福德vs jQuery。选择你的毒药。
埃里克(Eric)

克罗克福德对此有何解释?
BadHorsie

1
这是我遵循的惯例。这更多是个人喜好。我喜欢对内部内容(如jQuery选择器)和/或诸如getElementById('id');之类的东西使用单引号引起来的字符串,我只喜欢单引号引起来的外观。但是,请切换为外部文本使用双引号,因为它通常可以在文本中包含内部引号。另外,如果您试图在一个或另一个字符串中发现错误,则可以很容易地发现并区分外部字符串和内部字符串。
adimauro

3
截至2016年4月,Douglas Crockford 现在建议仅使用双引号,因为在实践中,许多开发人员发现内部和外部二分法很难使用。
Thunderforge

27

严格来说,意义没有区别。因此选择取决于方便。

以下是可能影响选择的几个因素:

  • 房屋风格:一些开发人员组已经使用一种约定或另一种约定。
  • 客户端要求:您将在字符串中使用引号吗?(请参阅Ady的答案)。
  • 服务器端语言:VB.Net人们可能选择对Java脚本使用单引号,以便可以在服务器端构建脚本(VB.Net对字符串使用双引号,因此易于区分Java脚本字符串(如果使用单引号)。
  • 库代码:如果使用的库使用特定样式,则可以考虑自己使用相同的样式。
  • 个人喜好:您可能会认为一种或其他样式看起来更好。

不正确,'00100111二进制文件,"而是00100010二进制文件。因此,双引号占用的电量是单引号的一半。那就是那里的区别。

19

让我们看一下参考的作用。

在jquery.js中,每个字符串都用双引号引起来。

因此,从现在开始,我将使用双引号引起来的字符串。(我正在使用单身!)


11
为什么对此不赞成。这是一个风格问题,最好的风格是保持一致并跟随那些在您之前的人。
埃里克(Eric)

2
+1 jQuery API文档也这样做。这是我选择双引号的唯一原因。就我个人而言,我认为“取决于个人喜好”的答案有些缺陷-最好找出一种广泛使用的惯例并坚持下去。并且由于我可能想直接或间接地从jQuery复制和粘贴示例,所以我不想每次都替换引号。
史蒂夫·钱伯斯

2
也许jQuery无法跟上他们之前的人们(或者像大多数其他专家一样,真的不在乎)。;)
James Wilkins 2014年

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或express,看看它们使用什么约定,并考虑遵循。

  • 如果两个约定均被使用,则请遵循您的个人
    喜好。

  • 如果您没有个人喜好,那就掷硬币。

  • 如果您没有硬币,啤酒就在我身上;)


13

我希望我没有添加明显的内容,但是我一直在努力与Django在为此 Ajax和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>'

您可以在showThis的第三个字段中找到\'。

双引号无效!

很清楚为什么,但是也很清楚为什么我们应该坚持单引号.....我想..

这种情况是非常简单的HTML嵌入,该错误是由“双引号” JavaScript代码中的简单复制/粘贴产生的。

所以要回答这个问题:

尝试在HTML中使用单引号。它可能会节省几个调试问题...


1
我在ES6字符串插值(反引号)中遇到了类似的问题。我的构建系统将其编译为双引号字符串,该字符串破坏了一直使用单引号的Auth标头!
杰伊

12

不知道这在当今世界是否有意义,但是双引号曾经用于需要处理控制字符的内容,而单引号则用于不需要处理的字符。

编译器将在双引号字符串上运行字符串操作,而单引号字符串实际上保持不变。这通常导致“好的”开发人员选择对不包含控制字符(例如\n\0(不在单引号内处理)的字符串)使用单引号,并在需要解析字符串时使用双引号(对于处理字符串)。


14
并不是说事情以前曾经以一种方式完成,而现在又是另一种方式了。不同的语言对引号的处理方式有所不同,某些语言如您所描述。但这是一个JavaScript问题。在JavaScript中,单引号和双引号被相同地对待(除了允许在字符串中使用其他类型的引号而不进行转义)。毫无疑问,双引号允许控制字符或字符串插值。JavaScript不能那样工作。无论使用哪种引号,控制字符和转义序列的作用都相同。
Michael Geary 2014年

作为前Perl程序员,尽管我知道它与JS无关,但我一直在思考。
2014年

12

如果您使用的是jshint,则使用双引号字符串将引发错误。

我通过AngularJS的Yeoman scafflholding使用它,但是也许可以通过某种方式进行配置。

顺便说一下,当您将HTML处理到JavaScript中时,使用单引号会更容易:

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

至少JSON使用双引号表示字符串。

没有简单的方法可以回答您的问题


实施jshint是否已更改?因为该演示网站似乎在不引发任何警告/错误的情况下接受了这两种方法,并且我找不到任何限制jshint使用的选项。也许这个答案是过时的或不正确的?
莉亚·海斯

如果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秒的时间(因为我必须按Shift键)。然后在任何一天,我浪费3秒。如果我以这种方式进行编码,在40年中每年花费200天,那么我就浪费了6.7个小时。值得深思。


1
我想您在这里只指英文键盘布局...我有一个德语键盘,我两个都必须按shift键。无论如何,我不明白为什么按下Shift键会增加时间。我用左手击中shift,然后用右按引号键。它是同时发生的,对我而言没有区别。
codewandler

1
@codewandler即使您可以与“键”同时按下,也仍然需要按Shift键。这会迫使您将手指从其默认位置移开。例如,假设您键入:var description = "This is a \"quick\" test";on对于英文键盘,小指必须从左Shift键向上移动到第一行的Q键,而不是从A键移动到Q键,换句话说,它的移动距离必须是两倍。我不确定这些键在德语键盘上的什么位置,但是我敢肯定有一个类似的例子
John Kurlak

2
@codewandler此外,不必键入转变,即使我可以同时做,不允许的左小指准备后,“输入的下一个字符无论你打字。
约翰Kurlak

1
“时间浪费”的想法有点愚蠢,但是减少人体工程学压力的想法(尤其是在心管隧道综合征时代等)使它受益匪浅,特别是在其他情况下无关紧要的情况下。假设每天有1000行以上的代码,则每天可以节省数百个小指弯。
Beejor

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()通常就足够了。如果没有,请使用模板。

赞成双引号

  • 如果没有颜色编码,则更容易发现双打。就像在控制台日志或某种视图源设置中一样。
  • 与其他语言的相似性:在Shell编程(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时,您可以传递变量并使用PHP中的字符串和变量解析javascript函数。

如果您编写一个字符串并为PHP使用双引号,则无需转义任何单引号,PHP会自动为您检索变量的值。

示例:我需要使用服务器中的变量来运行javascript函数。

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

这为我省去了处理连接字符串的麻烦,而且我可以有效地从PHP调用JavaScript。这仅是一个示例,但这可能是程序员默认在javascript中使用单引号的几个原因之一。

来自PHP文档的引文:“双引号字符串的最重要特征是变量名称将得到扩展。有关详细信息,请参见字符串解析。”


+1,我在MVC.Net项目中执行此操作,以使C#中的双引号不会干扰javascript中的单引号,反之亦然。
DCShannon

3
我认为,如果您要通过PHP类方法将JavaScript编写到页面上,则会遇到更大的问题。
BadHorsie

6

有些人声称看到性能差异:旧邮件列表线程。但是我找不到任何要确认的东西。

最主要的是要查看在字符串内部使用哪种引号(双引号或单引号)。它有助于将逃生通道的数量保持在较低水平。例如,当您在字符串中使用html时,使用单引号会更容易,这样您就不必在属性周围转义所有双引号。


虽然属性也可以用单引号引起来:)
DamirZekić08-10-28

您的权利,我认为xml和xhtml在属性周围规定了双引号,但允许使用单引号。
米歇尔·奥弗雷姆

6

当不能使用单引号时,我会使用双引号,反之亦然:

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

代替:

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

怎么样含有单引号和双引号像O'rea“LLY字符串
sudhAnsu63

6

JavaScript中的单引号和双引号没有区别。

规格很重要:

也许会有性能差异,但是它们绝对是最小的,并且会根据浏览器的实现每天变化。除非您的JavaScript应用程序长数十万个,否则进一步的讨论是徒劳的。

这就像一个基准

a=b;

a = b;

(多余的空格)

今天,在特定的浏览器和平台等中。


2
没有空格会更快。较少的字符可解析到字符串中。:p
pilavdzice 2012年

6

使用CoffeeScript时,我使用双引号。我同意您应该选择其中一个并坚持下去。当使用双引号时,CoffeeScript会为您提供插值。

"This is my #{name}"

ES6正在使用反勾号(`)作为模板字符串。这可能有充分的理由,但是在编码时,为了获得插值功能,将字符串文字字符从引号或双引号更改为反斜杠可能会很麻烦。CoffeeScript可能不是完美的,但是在各处使用相同的字符串文字字符(双引号)并且始终能够插值是一个不错的功能。

`This is my ${name}`

对我来说,倒勾是这场比赛的明显胜利者,(几乎)在普通文本字符串中没有出现,加上var插值
Simone Poggi

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引擎在代码运行时对其进行优化。(由于JIT的工作原理,在对Java进行基准测试时,您会看到相同的效果。)
David Phillips,

4
第一个新日期比较慢,请var dummy_date = new Date()重新开始
-Lauri

1
此处的微优化级别是如此愚蠢,以至于您还可以说单引号的键入速度更快,从而可以加快开发速度。
Beejor

4

完全没有区别,因此,保持转义数很低主要取决于口味和字符串中的内容(或者如果JS代码本身在字符串中)。

速度差异图例可能来自PHP世界,其中两个引号的行为不同。


还有Ruby,我可能会补充。Python与JavaScript具有相同的行为:单引号/双引号之间没有区别。
DamirZekić08年


4

现在到了2020年,我们应该考虑Javascript的第三个选择:针对所有内容的单个反引号。

可以在任何地方使用它而不是单引号或双引号。

它可以让您做所有事情!

  1. 在其中插入单引号: “太好了!”
  2. 在其中加上双引号: `“真的”很棒!
  3. 使用字符串插值: `比“ $ {better}”好极了!
  4. 它允许多行: `

    这个

    使

    Java脚本

    更好!

    `

替换其他两个时,它也不会造成任何性能损失: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')

底线,正如某些人提到/暗示的那样,选择一个惯例,坚持使用它,仅在必要时偏离。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.