考虑以下两种备选方案:

console.log(“double”);console.log(“单个”);

前者在字符串两边使用双引号,而后者在字符串周围使用单引号。

我看到越来越多的JavaScript库在处理字符串时使用单引号。

这两种用法可以互换吗?如果没有,使用一个是否优于另一个?


当前回答

我想说,区别纯粹是风格上的,但我真的有点怀疑。考虑以下示例:

/*
    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(在Internet Explorer 7和Internet Explorer 8中测试)中,这将返回以下内容:

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显示出差异,它处理双引号的速度会稍快一些。我在歌剧中发现没有什么不同。

2014年:Firefox/Spidermonkey的现代版本不再这么做了。

其他回答

只需保持使用的一致性。但不要降低你的舒适度。

"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更新

使用模板文本语法。

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

没有更好的解决方案;然而,我想指出,有时双引号可能更可取:

新来者将已经熟悉他们语言中的双引号。在英语中,我们必须使用双引号“来识别一段被引用的文本。如果我们使用单引号”,读者可能会将其误解为一个收缩词。被“”包围的一段文本的其他含义表示“口语”含义。保持与现有语言一致是有意义的,这可能会简化代码的学习和解释。双引号不需要转义撇号(如缩写)。考虑一下字符串:“我要去购物中心”,而不是其他转义的版本:“我将去购物中心。”。双引号在许多其他语言中表示字符串。当你学习像Java或C这样的新语言时,总是使用双引号。在Ruby、PHP和Perl中,单引号字符串表示没有反斜杠转义,而双引号支持它们。JSON符号用双引号书写。

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

严格地说,意思没有区别;因此,选择归根结底是为了方便。

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

房屋风格:一些开发商已经使用了一种或另一种惯例。客户端要求:您会在字符串中使用引号吗?(见Ady的回答。)服务器端语言:VB.NET人员可能会选择对JavaScript使用单引号,以便可以在服务器端构建脚本(VB.NET对字符串使用双引号,因此如果使用单引号则很容易区分JavaScript字符串)。库代码:如果您正在使用使用特定样式的库,您可以考虑自己使用相同的样式。个人喜好:你可能会觉得一种或另一种风格更好看。

我想说,区别纯粹是风格上的,但我真的有点怀疑。考虑以下示例:

/*
    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(在Internet Explorer 7和Internet Explorer 8中测试)中,这将返回以下内容:

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显示出差异,它处理双引号的速度会稍快一些。我在歌剧中发现没有什么不同。

2014年:Firefox/Spidermonkey的现代版本不再这么做了。

可以使用单引号或双引号。

例如,这使您能够轻松地将JavaScript内容嵌套在HTML属性中,而无需转义引号。使用PHP创建JavaScript时也是如此。

总的想法是:如果可能的话,使用这样的引号,你不需要逃避。

更少的转义=更好的代码。