考虑以下两种备选方案:

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

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

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

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


当前回答

严格来说没有什么区别,所以这主要取决于口味和字符串中的内容(或者如果JavaScript代码本身在字符串中),以保持较少的转义数。

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

其他回答

本规范第7.8.4节描述了文字字符串表示法。唯一的区别是DoubleStringCharacter是“SourceCharacter但不是双引号”,而SingleStringCharacter则是“SourceCharacter但不是单引号”。因此,唯一的区别可以证明如下:

'A string that\'s single quoted'

"A string that's double quoted"

因此,这取决于您要进行多少引号转义。显然,这同样适用于双引号字符串中的双引号。

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

Douglas Crockford1建议使用双引号。

我个人也这么认为。

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

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

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

我认为,如果您正在进行内联JavaScript(可以说是一件“糟糕”的事情,但要避免这种讨论),单引号是字符串文字的唯一选项。

例如,这很好:

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

但是你不能通过我所知道的任何转义方法将“hi”用双引号括起来。甚至“;这可能是我最好的猜测(因为你在HTML属性值中转义引号)在Firefox中不适用。“也不起作用,因为此时您正在逃避HTML,而不是JavaScript。

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

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

"This is my #{name}"

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

`This is my ${name}`