考虑以下两种备选方案:
console.log(“double”);console.log(“单个”);
前者在字符串两边使用双引号,而后者在字符串周围使用单引号。
我看到越来越多的JavaScript库在处理字符串时使用单引号。
这两种用法可以互换吗?如果没有,使用一个是否优于另一个?
考虑以下两种备选方案:
console.log(“double”);console.log(“单个”);
前者在字符串两边使用双引号,而后者在字符串周围使用单引号。
我看到越来越多的JavaScript库在处理字符串时使用单引号。
这两种用法可以互换吗?如果没有,使用一个是否优于另一个?
当前回答
谈到性能,报价永远不会成为您的瓶颈。然而,这两种情况下的性能是相同的。
谈到编码速度,如果您使用'来分隔字符串,则需要转义“引号”。更可能需要在字符串内部使用“”。例子:
// JSON Objects:
var jsonObject = '{"foo":"bar"}';
// HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';
然后,我更喜欢使用'来分隔字符串,所以我必须转义更少的字符。
其他回答
严格来说没有什么区别,所以这主要取决于口味和字符串中的内容(或者如果JavaScript代码本身在字符串中),以保持较少的转义数。
速度差异图例可能来自PHP世界,其中两个引号具有不同的行为。
没有更好的解决方案;然而,我想指出,有时双引号可能更可取:
新来者将已经熟悉他们语言中的双引号。在英语中,我们必须使用双引号“来识别一段被引用的文本。如果我们使用单引号”,读者可能会将其误解为一个收缩词。被“”包围的一段文本的其他含义表示“口语”含义。保持与现有语言一致是有意义的,这可能会简化代码的学习和解释。双引号不需要转义撇号(如缩写)。考虑一下字符串:“我要去购物中心”,而不是其他转义的版本:“我将去购物中心。”。双引号在许多其他语言中表示字符串。当你学习像Java或C这样的新语言时,总是使用双引号。在Ruby、PHP和Perl中,单引号字符串表示没有反斜杠转义,而双引号支持它们。JSON符号用双引号书写。
尽管如此,正如其他人所说,保持一致是最重要的。
可以使用单引号或双引号。
例如,这使您能够轻松地将JavaScript内容嵌套在HTML属性中,而无需转义引号。使用PHP创建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的现代版本不再这么做了。
使用CoffeeScript时,我使用双引号。我同意你应该选择其中一个并坚持下去。CoffeeScript在使用双引号时提供了插值。
"This is my #{name}"
ECMAScript 6对模板字符串使用反引号(`)。这可能有很好的原因,但在编码时,为了获得插值功能,将字符串文字字符从引号或双引号更改为反引号可能会很麻烦。CoffeeScript可能并不完美,但在任何地方使用相同的字符串文字字符(双引号)并始终能够插入是一个不错的特性。
`This is my ${name}`