考虑以下两种备选方案:

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

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

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

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


当前回答

此外,该规范(目前在MDN中提到)似乎没有说明单引号和双引号之间的任何区别,除了右引号和一些未转义的几个字符。然而,模板文本(`-反引号字符)需要额外的解析/处理。

字符串文字是用单引号或双引号括起来的0个或多个Unicode代码点。Unicode码点也可以用转义序列表示。除右引号代码点U+005C(REVERSE SOLIDUS)、U+000D(CARRIAGE RETURN)和U+000A(LINE FEED)外,所有代码点都可以按字面形式出现在字符串文字中。任何代码点都可能以转义序列的形式出现。字符串文本计算为ECMAScript字符串值。。。

资料来源:https://tc39.es/ecma262/#sec-文字字符串文字

其他回答

如果使用的是JSHint,如果使用双引号字符串,则会引发错误。

我通过Yeoman清理AngularJS使用了它,但也许有某种方式可以配置它。

顺便说一句,当您将HTML转换为JavaScript时,使用单引号更容易:

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

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

回答你的问题没有任何琐碎的方法。

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

"This is my #{name}"

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

`This is my ${name}`

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

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

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

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

"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

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