何时在JavaScript中使用双引号或单引号?

时间:2008-10-28 10:34:35

标签: javascript string conventions

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

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

44 个答案:

答案 0 :(得分:1136)

在不同库中使用single vs double的最可能原因是程序员偏好和/或API一致性。

除了保持一致外,请使用最合适的字符串:。

将其他类型的引用用作文字:

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

......但这可能会变得复杂......

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

另一个选项,ES6中的新选项,Template literals使用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`);

模板文字提供了一种干净的语法:变量插值,多行字符串等。

答案 1 :(得分:595)

如果你正在处理JSON,应该注意严格来说,JSON字符串必须加双引号。当然,许多库也支持单引号,但在我意识到单引号字符串实际上不符合JSON标准之前,我在其中一个项目中遇到了很多问题。

答案 2 :(得分:303)

没有更好的解决方案;但是,我想说有时双引号可能更合适:

  • 新手已熟悉其语言的双引号。在英语中,我们必须使用双引号"来标识引用文本的段落。如果我们使用单引号',读者可能会将其误解为收缩。由'包围的文本段落的另一个含义表示“口语”含义。与预先存在的语言保持一致是有意义的,这可能会简化代码的学习和解释。
  • 双引号消除了转义撇号的需要(如在收缩中)。请考虑字符串:"I'm going to the mall",与其他转义版本:'I\'m going to the mall'
  • 双引号表示许多其他语言的字符串。当您学习Java或C等新语言时,始终使用双引号。在Ruby,PHP和Perl中,单引号字符串表示没有反斜杠转义,而双引号支持它们。

  • JSON表示法是用双引号编写的。

尽管如此,正如其他人所说,保持一致是最重要的。

答案 3 :(得分:115)

差异如下所示:

'A string that\'s single quoted'

"A string that's double quoted"

所以,这只取决于您想要做多少报价。显然,同样适用于双引号字符串中的双引号。

答案 4 :(得分:83)

单引号

我希望双引号是标准,因为它们make a little bit more sense,但我一直使用单引号,因为它们支配着场景。

单引号:

没有偏好:

双引号:

答案 5 :(得分:56)

我想说的不同之处纯粹是风格,但我真的很怀疑。请考虑以下示例:

/*
   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,好像所有内容都是用双引号编写的。 有人可能会认为,如果所有内容都已根据此“标准”编写,则需要花费较少的时间来解析JavaScript。

顺便说一句,这让我成为一只非常伤心的熊猫,因为我认为单引号在代码中看起来更好。另外,在其他编程语言中,它们使用起来通常比双引号更快,所以只有同样适用于JavaScript才有意义。

结论:我认为我们需要对此进行更多研究。

修改:这可能会在2003年解释Peter-Paul Koch's test results

  

在资源管理器Windows中,单引号似乎有时更快(大约1/3的测试确实表现出更快的响应时间),但如果Mozilla显示出差异,它会处理双引号稍快一些。我发现Opera没有任何区别。

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

答案 6 :(得分:31)

如果你正在使用内联JavaScript(可以说是一个“坏”的东西,但是避免讨论)单个引号是字符串文字的唯一选择,我相信。

例如,这很好用:

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

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

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

答案 7 :(得分:29)

从技术上讲,没有区别,只有风格和惯例才是问题。

道格拉斯·克罗克福德建议对内部字符串使用单引号,对外部使用双引号(外部我们指的是向应用程序用户显示的那些,如消息或警报)。

我个人也是如此。

更新:看来Crockford先生changed his mind现在建议使用双引号:)

答案 8 :(得分:25)

严格来说,意义上没有区别;所以选择归结为方便。

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

  • 家居风格:一些开发者团体已经使用过一种约定。
  • 客户端要求:您是否会在字符串中使用引号? (见Ady的回答)。
  • 服务器端语言:VB.Net人们可能会选择对java脚本使用单引号,以便脚本可以在服务器端构建(VB.Net对字符串使用双引号,因此java脚本字符串是如果他们使用单引号,则易于区分。
  • 库代码:如果您使用的是使用特定样式的库,您可以考虑自己使用相同的样式。
  • 个人偏好:你可能会看到一种或其他风格看起来更好。

答案 9 :(得分:17)

让我们看一下参考文献的内容。

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

所以,从现在开始,我将使用双引号字符串。 (我用的是单身!)

答案 10 :(得分:14)

这主要是风格和偏好的问题。在其他答案中有一些相当有趣和有用的技术探索,所以我可能添加的唯一一件事就是提供一些世俗的建议。

  • 如果您在公司或团队中进行编码,那么这可能是一个好主意 遵循“家庭风格”。

  • 如果你独自攻击一些辅助项目,那么会看一下社区中的一些杰出领导者。比如让我们说你进入了Node.js.看一下核心模块,例如underscore.js或者表达什么 他们使用的惯例,并考虑遵循这一点。

  • 如果两种约定同等使用,则然后按照您的个人惯例 偏好。

  • 如果您没有个人偏好,翻转硬币。

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

答案 11 :(得分:13)

我希望我不会添加明显的内容,但我一直在与DjangoAjax以及JSON进行斗争。

假设您在HTML代码中使用双引号(通常应该如此),我强烈建议在JavaScript中使用单引号。

所以我同意@ady,但要小心。

我的底线是: 在JavaScript中可能没关系,但只要你嵌入 它在HTML或类似内容中你开始遇到麻烦。你应该知道 什么是逃避,阅读,传递你的字符串。

我的简单案例是:

tbox.innerHTML = tbox.innerHTML + '<div class="thisbox_des" style="width:210px;" onmouseout="clear()"><a href="/this/thislist/'
                   + myThis[i].pk +'"><img src="/site_media/'
                   + myThis[i].fields.thumbnail +'" height="80" width="80" style="float:left;" onmouseover="showThis('
                   + myThis[i].fields.left +','
                   + myThis[i].fields.right +',\''
                   + myThis[i].fields.title +'\')"></a><p style="float:left;width:130px;height:80px;"><b>'
                   + myThis[i].fields.title +'</b> '
                   + myThis[i].fields.description +'</p></div>'

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

双引号不起作用!

很明显为什么,但也很明显为什么我们应该坚持使用单引号... ..我想..

这种情况是一个非常简单的HTML嵌入,生成了错误 通过“双引号”JavaScript代码中的简单复制/粘贴。

所以回答这个问题:

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

答案 12 :(得分:12)

不确定这在当今世界是否相关,但是双引号曾用于需要处理控制字符的内容,而单引号则用于没有处理控制字符的字符串。

编译器将对双引号字符串运行字符串操作,同时保留单引号字符串不变。这曾经导致'好'的开发人员选择对不包含控件字符的字符串使用单引号,如\n\0(未在单引号内处理)和双引号,当他们需要字符串时解析(在处理字符串的cpu周期中花费很少)。

答案 13 :(得分:12)

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

我通过Yeoman的AngularJS脚手架使用它,但也许有某种方式来配置它。

顺便说一下,当你将HTML处理成JavaScript时,使用单引号更容易:

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

至少JSON使用双引号来重现字符串。

回答你的问题没有简单的方法

答案 14 :(得分:12)

只需保持您使用的一致性。但是不要放松你的舒适程度。

"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

答案 15 :(得分:10)

谈到性能,报价永远不会成为你的瓶颈,但两种情况下的表现都是一样的。

谈论编码速度,如果使用'来分隔字符串,则需要转义"引号。您更有可能需要在字符串中使用",例如:

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

然后,我更喜欢使用'来分隔字符串,所以我必须减少字符数。

答案 16 :(得分:9)

使用单引号的一个(愚蠢)原因是它们不需要您按Shift键来键入它们,而双引号则需要。 (我假设平均字符串不需要转义,这是一个合理的假设。)现在,让我们假设我每天编写200行代码。也许在这200行中我有30个引号。也许输入双引号比输入单引号花费0.1秒(因为我必须按下shift键)。然后在任何一天,我浪费3秒。如果我以这种方式编码,每年200天,40年,那么我浪费了6.7小时的生命。值得深思。

答案 17 :(得分:9)

  

检查利弊

支持单引号

  • 减少视觉混乱。
  • 生成HTML:HTML属性通常用双引号分隔。

&#13;
&#13;
elem.innerHTML = '<a href="' + url + '">Hello</a>';
&#13;
&#13;
&#13; 但是,单引号在HTML中也是合法的。

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

此外,内联HTML通常是反模式。喜欢模板。

  • 生成JSON:JSON中只允许使用双引号。

&#13;
&#13;
myJson = '{ "hello world": true }';
&#13;
&#13;
&#13;

同样,您不必以这种方式构造JSON。 JSON.stringify()通常就足够了。如果没有,请使用模板。

支持双引号

  • 如果您没有彩色编码,则更容易发现双打。就像在控制台日志或某种视图源设置中一样。
  • 与其他语言的相似之处:在shell编程(Bash等)中,存在单引号字符串文字,但不会在其中解释转义。 C和Java对字符串使用双引号,对字符使用单引号。
  • 如果您希望代码是有效的JSON,则需要使用双引号。

赞成两者

JavaScript中的两者没有区别。因此,您可以使用目前方便的任何方式。例如,以下字符串文字都生成相同的字符串:

&#13;
&#13;
    "He said: \"Let's go!\""
    'He said: "Let\'s go!"'
    "He said: \"Let\'s go!\""
    'He said: \"Let\'s go!\"'
&#13;
&#13;
&#13;

内部字符串的单引号和外部的双引号。这允许您区分内部常量和要显示给用户的字符串(或写入磁盘等)。显然,你应该避免将后者放在你的代码中,但这并不总能做到。

答案 18 :(得分:8)

您可能需要考虑的另一件事是从双引号转换为单引号的原因是服务器端脚本的流行度增加。使用PHP时,您可以使用PHP中的字符串和变量传递变量并解析javascript函数。

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

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

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

这让我在处理加入字符串方面省去了很多麻烦,而且我可以有效地从PHP调用javascript。这只是一个例子,但这可能是程序员在javascript中默认使用单引号的几个原因之一。

Quote from PHP documents:“双引号字符串最重要的特性是变量名称将被扩展。请参阅字符串解析以获取详细信息。”

答案 19 :(得分:6)

使用CoffeeScript时,我使用双引号。我同意你应该选择任何一个并坚持下去。 CoffeeScript在使用双引号时为您提供插值。

"This is my #{name}"

ES6正在使用反向标记(`)作为模板字符串。这可能有一个很好的理由,但是在编码时,将字符串文字字符从引号或双引号更改为返回标记以获得插值功能可能很麻烦。 CoffeeScript可能不完美,但在任何地方使用相同的字符串文字字符(双引号)并始终能够插值是一个很好的功能。

`This is my ${name}`

答案 20 :(得分:6)

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

规范很重要:

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

如果

,它就像一个基准
a=b;

a = b;

(额外空格)

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

答案 21 :(得分:6)

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

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

而不是:

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

答案 22 :(得分:5)

有些人声称会看到效果差异:old mailing list thread。但我发现其中任何一个都无法确认。

主要是看你在字符串中使用什么样的引号(双引号或单引号)。它有助于保持低逃逸的数量。例如,当您在字符串中使用html时,使用单引号更容易,因此您不必转义属性周围的所有双引号。

答案 23 :(得分:5)

如果你在JavaScript和C#之间跳回来,最好训练你的双手引号的常见约定。

答案 24 :(得分: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));

答案 25 :(得分:4)

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

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

它允许您做所有事情!

  1. 其中嵌入单引号:“太好了!”

  2. 在其中嵌入双引号:`“真的”很棒!

  3. 使用字符串插值:`比“ $ {better}”好得多!

  4. 它允许多行:`

    制造

    JavaScript

    更好!

`

替换其他两个时,也不会造成任何性能损失: Are backticks (``) slower than other strings in JavaScript?

答案 26 :(得分:4)

在阅读了所有可能更快或可能有优势的答案之后,我会说双引号更好或者更快,因为Google closure compiler将单引号转换为双引号。

答案 27 :(得分:3)

添加我的2美分:几年前,在使用JS和PHP时,我已经习惯使用单引号,因此我可以输入转义字符(&#39; \&#39; )也不必逃避它。我通常在使用文件路径等键入原始字符串时使用它(http://en.wikipedia.org/wiki/String_literal#Raw_strings

无论如何,我的约定最终变成了对标识符类型原始字符串使用单引号,例如if (typeof s == 'string') ...(永远不会使用转义字符),以及文本的双引号,例如&#34;嘿,是什么?&#34;。我还在注释中使用单引号作为显示标识符名称的印刷约定。这只是一个经验法则,我只在需要时中断,例如在键入HTML字符串'<a href="#"> like so <a>'时(尽管你也可以在这里反转引号)。我也知道,在JSON的情况下,双引号用于名称 - 但在个人之外,我更喜欢单词引号,当转义是从不所需的文本之间引号 - 如document.createElement('div')

底线,正如一些人提到/提到的那样,选择一个约定,坚持下去,并且只在必要时偏离。

答案 28 :(得分:3)

严格没有区别,所以它主要是品味和字符串中的内容(或者如果JS代码本身在字符串中),以保持较低的转义次数。

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

答案 29 :(得分:3)

您可以使用单引号或双引号。 这使您可以轻松地将JavaScript嵌套在HTML属性中,而无需转义引号。 当你用PHP创建javascript时也一样。

一般的想法是:如果有可能使用这样的报价,你就不需要逃避。 减少逃避=更好的代码。

答案 30 :(得分: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"]

我确信这需要一些时间。

答案 31 :(得分:2)

区别在于纯粹的风格。我曾经是一个双引号纳粹。现在我几乎在所有情况下都使用单引号。除了编辑器突出显示语法之外,没有实际的区别。

答案 32 :(得分:1)

对我来说,如果我在VIM编辑器中编码并且如果用单引号括起来,我可以双击以仅选择引号内的文本。另一方面,双引号包括引号,当我想做一些快速复制和粘贴时,我觉得这很烦人。

E.g。 'myVar'双击VIM编辑器副本:&gt; myVar&lt; “myVar”字面上复制:&gt;“myVar”&lt;当我粘贴时,我必须删除任何一方的引号。

无论如何我的两分钱......

答案 33 :(得分:1)

我认为重要的是不要忘记虽然IE可能安装了0个扩展/工具栏,但firefox可能安装了一些扩展(我只是考虑使用firebug)。这些扩展将对基准测试结果产生影响。

这并不重要,因为浏览器X在获取元素样式方面更快,而浏览器Y在渲染canvas元素时可能更快。 (因此浏览器“制造商”总是拥有最快的javascript引擎)

答案 34 :(得分:1)

对我来说只是时间。每次我必须先按shift键才能输入"

,这会让我的生命损失几毫秒

我更喜欢'因为你不必这样做!

除此之外,您可以使用反斜杠'

在单引号内转义\'

console.log('Don\'t lose time'); // "Don't lose time"

答案 35 :(得分:1)

我大部分时间都使用单引号,因为在php中开发时,单引号字符串绝不会改变,这就是我想要的。当我使用

echo "$xyz";

在php中,$ xyz得到评估,这不是我想要的。因此我总是使用&#39;而不是&#34;谈到Web开发。所以我在php / jscript方面确保至少字符串一致性。

不幸的是,这不能在java或Objective c中完成,其中&#39;&#39;代表char和&#34;&#34;代表字符串。但这是另一个问题。

答案 36 :(得分:1)

如果使用php生成JavaScript代码,则应使用以下声明。

let value = "<?php echo 'This is my message, "double quoted" - \'single quoted\' ?>";

输出将是:

This is my message, "double quoted" - 'single quoted'

由于某些原因,建议在PHP中使用单引号而不是双引号。 对于Javascript中的正常行为,建议使用单引号。

&#13;
&#13;
var value = 'This is my message';
document.getElementById('sample-text').innerHTML = value;
&#13;
<span id="sample-text"></span>
&#13;
&#13;
&#13;

答案 37 :(得分:0)

我更喜欢使用单引号'。输入起来更容易,外观也更好。

还要记住,在良好的排版中,直引号(单引号和双引号)是一个错误。最好使用弯引号,所以我更喜欢使用正确的字符,而不是转义引号。

const message = 'That\'s a \'magic\' shoe.' // This is wrong
const message = 'That’s a ‘magic’ shoe.' // This is correct

https://practicaltypography.com/straight-and-curly-quotes.html

请问有人可以在Visual Studio Code中添加智能报价功能吗?

答案 38 :(得分:0)

您不能在带有高引号的高文本和vscode中执行此代码:

<a href="javascript:alert(“Hello World!”);">Execute JavaScript</a>

此代码有效:

<a href="javascript:alert('Hello World!');">Execute JavaScript</a>

答案 39 :(得分:0)

出于可读性考虑,我个人更喜欢单引号。如果我整天盯着代码,那么看到带有单引号而不是双引号的单词会更容易。

更易于阅读,如下所示:

“易于阅读”

“难以阅读”

“”“最难阅读”“

答案 40 :(得分:0)

我认为这都是方便/偏好的问题。

我更喜欢双引号,因为它与C#的匹配以及我通常使用的环境:C#+ JS。

单引号双引号的一个可能原因是(我在我的项目代码中找到): 法语或其他一些语言使用单引号(实际上是英语),所以如果由于某种原因你最终从服务器端渲染字符串(我知道这是不好的做法),那么单引号会错误地呈现。

在常规语言中使用双引号的概率很低,因此我认为它有更好的机会不破坏某些东西。

答案 41 :(得分:-1)

正如其他回复所述,它们几乎相同。但我会尝试添加更多。

  1. 一些有效的算法使用字符数组来处理字符串。那些算法(浏览器编译器等)会在"(#39)之前看到'(#34),因此根据您的数据结构保存几个cpu周期。
  2. "被反XSS引擎转义

答案 42 :(得分:-2)

为了在不同语言中使用JavaScript代码,我发现单引号始终需要更少的代码调整。

双引号支持多行字符串。

答案 43 :(得分:-2)

最佳做法是在需要之后使用双引号(“”)首字母和单引号(''),原因是如果您使用服务器端脚本,则无法从服务器提取内容(例如,来自数据库的sql查询)如果你使用单引号而不是double。