什么时候应该在JavaScript中使用双引号或单引号?

2020/09/15 08:31 · javascript ·  · 0评论

console.log("double");console.log('single');

我看到越来越多的JavaScript库在处理字符串时使用单引号。为何一个使用另一个原因?

我认为它们几乎可以互换。

在不同的库中使用单一或双重的最可能原因是程序员的偏爱和/或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正式指定为使用双引号,这可能值得考虑,具体取决于系统要求。

如果要处理JSON,则应注意严格来说,JSON字符串必须用双引号引起来。当然,许多库也支持单引号,但是在意识到一个单引号实际上不符合JSON标准之前,我在一个项目中遇到了很大的问题。

没有一个更好的解决方案 ; 但是,我想指出有时双引号可能更可取:

  • 新人已经熟悉他们语言中的双引号用英语,我们必须使用双引号"来标识带引号的文本。如果我们使用单引号',则读者可能会将其误解为收缩。由包围的文字段落的其他含义'表示“口语”含义。与先前存在的语言保持一致很有意义,这可能会简化代码的学习和解释。
  • 双引号消除了转义撇号的需要(如在收缩中)。考虑字符串:"I'm going to the mall"和其他转义版本:'I\'m going to the mall'
  • 双引号表示许多其他语言中的字符串当您学习Java或C之类的新语言时,总是使用双引号。在Ruby,PHP和Perl中,单引号字符串表示没有反斜杠转义,而双引号支持它们。

  • JSON表示法用双引号引起来。

但是,正如其他人所说,保持一致是最重要的。

规范的 7.8.4节介绍了文字字符串表示法。唯一的区别是DoubleStringCharacter是“ SourceCharacter但不是双引号”,而SingleStringCharacter是“ SourceCharacter但不是单引号”。因此,唯一的区别可以由此证明:

'A string that\'s single quoted'

"A string that's double quoted"

因此,这取决于您要转义多少报价。显然,双引号字符串中的双引号也是如此。

单引号

我希望双引号是标准的,因为它们的含义要多一些,但是我继续使用单引号是因为它们在场景中占主导地位。

单引号:

没有偏好:

双引号:

我想说的是纯粹的风格上的差异,但是我确实有疑问。考虑以下示例:

/*
    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 7Internet 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才有意义。

结论:我认为我们需要对此进行更多研究。

这也许可以解释Peter-Paul Koch在2003年的测试结果

似乎在Explorer Windows 有时单引号有时会更快(大约1/3的测试确实显示出更快的响应时间),但是如果Mozilla完全不同,则处理双引号的速度会稍快。我发现Opera中没有任何区别。

2014年: Firefox / Spidermonkey的现代版本不再这样做。

我相信,如果您正在执行内联JavaScript(可以说是“坏”事情,但避免了讨论),则引号是字符串文字的唯一选择。

例如,这可以正常工作:

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

但是您不能通过我知道的任何转义方法将“ hi”用双引号引起来。即使&quot;这是我最好的猜测(因为您在HTML的属性值中转义了引号)在Firefox中对我也不起作用。 "也不起作用,因为此时您正在转义使用HTML,而不是JavaScript。

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

从技术上讲,没有区别。这只是样式和约定的问题。

Douglas Crockford建议对内部字符串使用单引号,对外部字符串使用双引号(外部是指要显示给应用程序用户的信息,例如消息或警报)。

我个人遵循。

更新:似乎克罗克福德先生改变了主意,现在建议在整个过程中使用双引号:)

严格来说,意义没有区别。因此选择取决于方便。

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

  • 房屋风格:一些开发人员组已经使用一种约定或另一种约定。
  • 客户端要求:您将在字符串中使用引号吗?(请参阅Ady的答案。)
  • 服务器端语言:VB.NET人们可能选择对JavaScript使用单引号,以便可以在服务器端构建脚本(VB.NET对字符串使用双引号,因此如果使用单引号,则JavaScript字符串易于区分。引号)。
  • 库代码:如果使用的库使用特定样式,则可以考虑自己使用相同的样式。
  • 个人喜好:您可能会认为一种或其他样式看起来更好。

让我们看看引用的作用。

在jquery.js中,每个字符串都被双引号引起来。

因此,从现在开始,我将使用双引号字符串。(我正在使用单身!)

只需保持使用内容的一致性即可。但是不要让您的舒适度降低。

"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

这主要是风格和喜好问题。其他答案中还有一些相当有趣且有用的技术探索,因此我可能唯一要添加的就是提供一些世俗的建议。

  • 如果您在公司或团队中编码,那么遵循“房屋风格”可能是一个好主意。

  • 如果您一个人在黑客一些副项目,那么请看一下社区中一些杰出的领导人。例如,假设您进入Node.js的看一下核心模块(例如Underscore.js或express),看看它们使用什么约定,然后考虑遵循。

  • 如果两种约定均被使用,则请遵循您的个人喜好。

  • 如果你没有任何个人的喜好,然后抛硬币。

  • 如果您没有硬币,啤酒就在我身上;)

我希望我没有添加明显的东西,但是我一直在为此苦苦挣扎着DjangoAjax和JSON。

假设您在HTML代码中确实像往常一样使用双引号,那么我强烈建议对JavaScript中的其余部分使用单引号。

因此,我同意ady的意见,但要多加注意。

我的底线是:

在JavaScript中,这可能并不重要,但是一旦将其嵌入HTML或类似内容中,便会遇到麻烦。您应该知道实际上是在转义,阅读,传递字符串。

我的简单案例是:

tbox.innerHTML = tbox.innerHTML + '<div class="thisbox_des" style="width:210px;" onmouseout="clear()"><a href="/this/thislist/'
                   + myThis[i].pk +'"><img src="/site_media/'
                   + myThis[i].fields.thumbnail +'" height="80" width="80" style="float:left;" onmouseover="showThis('
                   + myThis[i].fields.left +','
                   + myThis[i].fields.right +',\''
                   + myThis[i].fields.title +'\')"></a><p style="float:left;width:130px;height:80px;"><b>'
                   + myThis[i].fields.title +'</b> '
                   + myThis[i].fields.description +'</p></div>'

您可以在showThis的第三个字段中找到'。

双引号无效!

很清楚为什么,但是也很清楚为什么我们应该坚持单引号...我想...

这种情况是非常简单的HTML嵌入,并且错误是由“双引号” JavaScript代码中的简单复制/粘贴产生的。

所以要回答这个问题:

在HTML中尝试使用单引号。它可能会节省几个调试问题...

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

编译器将对双引号字符串运行字符串操作,而单引号字符串实际上保持不变。这通常导致“好的”开发人员选择对不包含控制字符(例如\n或)\0(未在单引号中处理)的字符串使用单引号,而在需要解析字符串时使用双引号(对于处理字符串)。

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

我通过AngularJS的Yeoman scafflholding使用它,但是也许可以通过某种方式配置它。

顺便说一句,当您将HTML处理到JavaScript中时,使用单引号会更容易:

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

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

没有任何简单的方法可以回答您的问题。

使用单引号的一个(愚蠢的)原因是它们不需要您按Shift键来键入它们,而双引号则需要。(我假设平均字符串不需要转义,这是一个合理的假设。)现在,让我们假设我每天编写200行代码。也许在那200行中,我有30个引号。也许输入双引号比输入单引号要花0.1秒的时间(因为我必须按Shift键)。然后在任何一天,我浪费3秒。如果我以这种方式进行编码,在40年中每年花费200天,那么我就浪费了6.7个小时。值得深思。

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

谈到编码速度,如果'用于定界字符串,则需要转义"引号。您更可能需要"在字符串内部使用例:

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

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

然后,我更喜欢使用'定界字符串,因此我必须转义更少的字符。

检查优缺点

赞成单引号

  • 视觉混乱更少。
  • 生成HTML:HTML属性通常用双引号分隔。
elem.innerHTML = '<a href="' + url + '">Hello</a>';

但是,单引号在HTML中同样合法。

elem.innerHTML = "<a href='" + url + "'>Hello</a>";

此外,内联HTML通常是一种反模式。首选模板。

  • 生成JSON:JSON中仅允许使用双引号。
myJson = '{ "hello world": true }';

同样,您不必不必以此方式构造JSON。JSON.stringify()通常就足够了。如果不是,请使用模板。

赞成双引号

  • 如果没有颜色编码,则更容易发现双打。就像在控制台日志或某种视图源设置中一样。
  • 与其他语言的相似性:在Shell编程(Bash等)中,存在单引号字符串文字,但是在其内部不解释转义。C和Java对字符串使用双引号,对于字符使用单引号。
  • 如果希望代码为有效的JSON,则需要使用双引号。

两者都赞成

两者在JavaScript中没有区别。因此,您现在可以使用任何方便的方式。例如,以下字符串文字都产生相同的字符串:

    "He said: \"Let's go!\""
    'He said: "Let\'s go!"'
    "He said: \"Let\'s go!\""
    'He said: \"Let\'s go!\"'

内部字符串使用单引号,外部字符串使用双引号。这样,您就可以将内部常量与要显示给用户(或写入磁盘等)的字符串区分开。显然,您应该避免将后者放入代码中,但这并不总是可以做到的。

作为双引号转换为单引号的一个原因,您可能还要考虑的另一件事是服务器端脚本的受欢迎程度增加。使用PHP时,您可以传递变量并使用PHP中的字符串和变量来解析JavaScript函数。

如果您编写一个字符串并为PHP使用双引号,则不必转义任何单引号,PHP会自动为您检索变量的值。

示例:我需要使用服务器中的变量来运行JavaScript函数。

public static function redirectPage( $pageLocation )
{
    echo "<script type='text/javascript'>window.location = '$pageLocation';</script>";
}

这为我省去了处理连接字符串的麻烦,而且我可以有效地从PHP调用JavaScript。这只是一个示例,但这可能是程序员默认在JavaScript中使用单引号的几个原因之一。

引用PHP文档

双引号字符串的最重要特征是变量名称将被扩展。有关详细信息,请参见字符串解析。

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

"This is my #{name}"

ECMAScript 6对模板字符串使用反斜线(`)。这可能有充分的理由,但是在编码时,为了获得插值功能,将字符串文字字符从引号或双引号更改为反引号可能会很麻烦。CoffeeScript可能不是完美的,但是在各处使用相同的字符串文字字符(双引号)并且始终能够插值是一个不错的功能。

`This is my ${name}`

当不能使用单引号时,我会使用双引号,反之亦然:

"'" + singleQuotedValue + "'"
'"' + doubleQuotedValue + '"'

代替:

'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""

我已经运行了以下大约20次。而且双引号似乎快了20%。

有趣的部分是,如果将第2部分和第1部分进行了更改,单引号的速度将提高约20%。

//Part1
var r='';
var iTime3 = new Date().valueOf();
for(var j=0; j<1000000; j++) {
    r+='a';
}
var iTime4 = new Date().valueOf();
alert('With single quote : ' + (iTime4 - iTime3));  

//Part 2                
var s="";
var iTime1 = new Date().valueOf();
for(var i=0; i<1000000; i++) {
    s += "a";
}
var iTime2 = new Date().valueOf();
alert('With double quote: ' + (iTime2 - iTime1));

有些人声称看到性能差异:旧邮件列表线程但是我找不到任何要确认的东西。

最主要的是要查看在字符串内部使用哪种引号(双引号或单引号)。它有助于将逃生通道的数量保持在较低水平。例如,当您在字符串中使用HTML内容时,使用单引号会更容易,这样您就不必在属性周围转义所有双引号。

JavaScript中的单引号和双引号之间没有任何区别。

规范很重要:

也许会有性能上的差异,但是它们绝对是最小的,并且可以根据浏览器的实施情况随时更改。除非您的JavaScript应用程序长数十万行,否则进一步的讨论是徒劳的。

这就像一个基准

a=b;

快于

a = b;

(多余的空格)

今天,在特定的浏览器和平台等中。

如果您要在JavaScript和C#之间来回跳动,则最好为通用约定(双引号)进行操作。

阅读完所有可能会更快或更有利的答案后,我会说双引号会更好或更快,因为Google Closure编译器会将单引号转换为双引号。

完全没有区别,因此,保持转义数很低主要取决于口味和字符串的内容(或者如果JavaScript代码本身位于字符串中)。

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

现在到了2020年,我们应该考虑JavaScript的第三个选择:针对所有内容的单个反引号。

它可以在任何地方使用,而不是单引号或双引号。

它可以让您做所有事情!

  1. 在其中嵌入单引号: “太好了!”

  2. 在其中加上双引号: `“真的”很棒!

  3. 使用字符串插值: `比“ $ {better}”好极了!

  4. 它允许多个行: `

    这个

    使

    的JavaScript

    更好!

`

替换其他两个时,它也不会导致任何性能损失:
反引号(``)是否比JavaScript中的其他字符串慢?

如果您的JavaScript来源是

elem.innerHTML="<img src='smily' alt='It\'s a Smily' style='width:50px'>";

HTML来源将是:

<img src="smiley" alt="It's a Smiley" style="width:50px">

或用于HTML5

<img src=smiley alt="It's a Smiley" style=width:50px>

JavaScript允许这样的数组:

var arr=['this','that'];

但是,如果将其字符串化,则出于兼容性原因:

JSON=["this","that"]

我确定这需要一些时间。

只需加上我的两分钱:几年前使用JavaScript和PHP时,我已经习惯于使用单引号,因此我可以键入转义符(''),而不必也对其进行转义。我通常在输入带有文件路径等的原始字符串时使用它

无论如何,我的约定最终变成了在标识符类型的原始字符串上使用单引号,例如if (typeof s == 'string') ...(永远不会使用转义字符),对文本使用双引号,例如“嘿,怎么了?”。我还将注释中的单引号用作印刷惯例,以显示标识符名称。这只是一个经验法则,我只会在需要时才会中断,例如在键入HTML字符串时'<a href="#"> like so <a>'(尽管您也可以在此处将引号反转)。我也知道,在JSON的情况下,双引号被用于名字-但外面个人而言,我更喜欢单引号时逃逸从未所需引号之间的文本-样document.createElement('div')

正如某些人提到/提到过的那样,最重要的是要选择一个约定,坚持一个约定,并且仅在必要时才偏离。

本文地址:http://javascript.askforanswer.com/shenmeshihouyinggaizaijavascriptzhongshiyongshuangyinhaohuodanyinhao.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!