考虑以下两种备选方案:
console.log(“double”);console.log(“单个”);
前者在字符串两边使用双引号,而后者在字符串周围使用单引号。
我看到越来越多的JavaScript库在处理字符串时使用单引号。
这两种用法可以互换吗?如果没有,使用一个是否优于另一个?
考虑以下两种备选方案:
console.log(“double”);console.log(“单个”);
前者在字符串两边使用双引号,而后者在字符串周围使用单引号。
我看到越来越多的JavaScript库在处理字符串时使用单引号。
这两种用法可以互换吗?如果没有,使用一个是否优于另一个?
当前回答
JavaScript中的单引号和双引号没有任何区别。
规范很重要:
可能存在性能差异,但它们绝对是最小的,并且可以根据浏览器的实现随时更改。除非JavaScript应用程序长达数十万行,否则进一步讨论是徒劳的。
这就像一个基准,如果
a=b;
比
a = b;
(额外空间)
今天,在特定的浏览器和平台等中。
其他回答
只需保持使用的一致性。但不要降低你的舒适度。
"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
JavaScript中的单引号和双引号没有任何区别。
规范很重要:
可能存在性能差异,但它们绝对是最小的,并且可以根据浏览器的实现随时更改。除非JavaScript应用程序长达数十万行,否则进一步讨论是徒劳的。
这就像一个基准,如果
a=b;
比
a = b;
(额外空间)
今天,在特定的浏览器和平台等中。
此外,该规范(目前在MDN中提到)似乎没有说明单引号和双引号之间的任何区别,除了右引号和一些未转义的几个字符。然而,模板文本(`-反引号字符)需要额外的解析/处理。
字符串文字是用单引号或双引号括起来的0个或多个Unicode代码点。Unicode码点也可以用转义序列表示。除右引号代码点U+005C(REVERSE SOLIDUS)、U+000D(CARRIAGE RETURN)和U+000A(LINE FEED)外,所有代码点都可以按字面形式出现在字符串文字中。任何代码点都可能以转义序列的形式出现。字符串文本计算为ECMAScript字符串值。。。
资料来源:https://tc39.es/ecma262/#sec-文字字符串文字
在不同的库中使用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被正式指定为使用双引号,这可能值得考虑,具体取决于系统需求。
我不确定这在当今世界是否相关,但双引号过去用于需要处理控制字符的内容,而单引号用于不需要处理的字符串。
编译器将在双引号字符串上运行字符串操作,同时保持单引号字符串不受影响。这曾导致“优秀”的开发人员选择对不包含\n或\0等控制字符的字符串使用单引号(不在单引号内处理),而在需要解析字符串时使用双引号(处理字符串的CPU周期会有少许成本)。