考虑以下两种备选方案:

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

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

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

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


当前回答

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

"This is my #{name}"

ECMAScript 6对模板字符串使用反引号(`)。这可能有很好的原因,但在编码时,为了获得插值功能,将字符串文字字符从引号或双引号更改为反引号可能会很麻烦。CoffeeScript可能并不完美,但在任何地方使用相同的字符串文字字符(双引号)并始终能够插入是一个不错的特性。

`This is my ${name}`

其他回答

有些人声称看到了性能差异:旧邮件列表线程。但我找不到任何一个可以确认的。

主要的事情是查看在字符串中使用的引号(双引号或单引号)。这有助于减少逃跑的次数。例如,当您在字符串中处理HTML内容时,使用单引号更容易,这样就不必转义属性周围的所有双引号。

在不同的库中使用single与double最可能的原因是程序员偏好和/或API一致性。除了保持一致,使用最适合字符串的字符串。

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

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

这可能会变得复杂:

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

ECMAScript 6中新增的另一个选项是模板文本,它使用反引号字符:

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被正式指定为使用双引号,这可能值得考虑,具体取决于系统需求。

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

"This is my #{name}"

ECMAScript 6对模板字符串使用反引号(`)。这可能有很好的原因,但在编码时,为了获得插值功能,将字符串文字字符从引号或双引号更改为反引号可能会很麻烦。CoffeeScript可能并不完美,但在任何地方使用相同的字符串文字字符(双引号)并始终能够插入是一个不错的特性。

`This is my ${name}`

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

编译器将在双引号字符串上运行字符串操作,同时保持单引号字符串不受影响。这曾导致“优秀”的开发人员选择对不包含\n或\0等控制字符的字符串使用单引号(不在单引号内处理),而在需要解析字符串时使用双引号(处理字符串的CPU周期会有少许成本)。

谈到性能,报价永远不会成为您的瓶颈。然而,这两种情况下的性能是相同的。

谈到编码速度,如果您使用'来分隔字符串,则需要转义“引号”。更可能需要在字符串内部使用“”。例子:

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

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

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