首页 文章

何时在JavaScript中使用双引号或单引号?

提问于
浏览
1756

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

在处理字符串时,我看到越来越多的JavaScript库使用单引号 . 使用一个而不是另一个的原因是什么?我认为它们几乎可以互换 .

30 回答

  • 6

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

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

    代替:

    '\'' + singleQuotedValue + '\''
    "\"" + doubleQuotedValue + "\""
    
  • 8

    我想说的不同之处纯粹是风格,但我真的很怀疑 . 请考虑以下示例:

    /*
       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(在IE7和IE8中测试)中,将返回以下内容:

    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,好像所有内容都是用双引号编写的 . 有人可能会认为,如果所有内容都已根据'standard'编写,则需要花费较少的时间来解析JavaScript .

    顺便说一句,这让我成为一个非常悲伤的熊猫,因为我认为单引号在代码中看起来更好 . 另外,在其他编程语言中,它们通常比双引号更快使用,因此只有同样适用于JavaScript才有意义 .

    Conclusion: 我认为我们需要对此进行更多研究 .

    Edit: 这可能解释了2003年的Peter-Paul Koch's test results .

    似乎在资源管理器Windows中单引号有时更快(大约1/3的测试确实表现出更快的响应时间),但如果Mozilla完全显示出差异,它会稍快处理双引号 . 我发现Opera没有任何区别 .

    Edit 2014: 现代版本的Firefox / Spidermonkey不再这样做了 .

  • 29

    这主要是风格和偏好的问题 . 在其他答案中有一些相当有趣和有用的技术探索,所以也许我唯一可能添加的是提供一些世俗的建议 .

    • 如果您在公司或团队中编码,那么按照"house style"进行编写可能是个好主意 .

    • 如果你独自攻击一些辅助项目,那么请看一下社区中的一些着名领导者 . 比如让我们说你进入Node.js.看看核心模块,例如underscore.js或表达他们使用的约定,并考虑遵循这一点 .

    • 如果两种惯例同等使用,则按照您的个人惯例
      偏爱 .

    • 如果您没有个人喜好,那就掷硬币 .

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

  • 13

    不确定这在当今世界是否相关,但是双引号曾用于需要处理控制字符的内容,而单引号则用于没有处理控制字符的字符串 .

    编译器将对双引号字符串运行字符串操作,同时保留单引号字符串字面上不变 . 这曾经导致'good'开发人员选择对不包含控制字符的字符串使用单引号,如 \n\0 (未在单引号内处理)和双引号,当需要解析字符串时(在cpu周期中略有成本)处理字符串) .

  • 14

    谈到性能,引用永远不会成为你的瓶颈,但是,两种情况下的性能都是相同的 .

    谈到编码速度,如果使用 ' 来分隔字符串,则需要转义 " 引号 . 在示例中,您更可能需要在字符串中使用 "

    //JSON Objects:
    var jsonObject = '{"foo":"bar"}';
    //HTML attributes:
    document.getElementById("foobar").innerHTML = '<input type="text">';
    

    然后,我更喜欢使用 ' 来分隔字符串,所以我必须逃避更少的字符 .

  • 18

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

  • 31

    完全没有区别,所以它主要是品味和字符串中的内容(或者如果JS代码本身是字符串),以保持低逃逸数 .

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

  • 6

    Just keep consistency in what you use. But don't let down your comfort level.

    "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
    

    ES6 update

    使用模板文字语法 .

    `Be "my" guest. You're in complete freedom.`; // most comfort :D
    
  • 12

    如果你正在使用内联JavaScript(可以说是"bad",但是避免讨论),我相信 single 引号是字符串文字的唯一选择 .

    例如,这工作正常:

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

    但你可以't wrap the 288482 in double quotes, via any escaping method I'米了解 . 甚至 " 本来是我最好的猜测(因为你在Firefox中为我工作 . " 赢了't work either because at this point you'为了HTML而不是JavaScript .

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

  • 5

    只是为了增加我的2美分:在使用JS和PHP几年前,我've become accustom to using single quotes so I can type the escape character (' ')而不必逃避它 . 我通常在使用文件路径等键入原始字符串时使用它 . (http://en.wikipedia.org/wiki/String_literal#Raw_strings

    无论如何,我的约定最终成为在标识符类型的原始字符串上使用单引号,例如 if (typeof s == 'string') ... (其中永远不会使用转义字符),以及文本的双引号,例如"Hey, what's up?" . 我还在注释中使用单引号作为显示标识符名称的印刷约定 . 这只是一个经验法则,我只在需要时中断,例如在键入HTML字符串 '<a href="#"> like so <a>' 时(虽然你也可以在这里反转引号) . 我也知道,在JSON的情况下,双引号用于名称 - 但在个人之外,我更喜欢单引号,当引号之间的文本从不需要转义时 - 如 document.createElement('div') .

    最重要的是,正如一些人提到/提到的那样,选择一个约定,坚持下去,并且只在必要时偏离 .

  • 270

    在阅读了所有可能更快或可能有优势的答案之后,我会说双引号更好或者更快也是因为Google closure compiler将单引号转换为双引号 .

  • 10

    如果您使用jshint,如果您使用双引号字符串,则会引发错误 .

    我通过AngomanJS的Yeoman脚手架使用它,但也许有某种方式来配置它 .

    顺便说一句,当你将HTML处理成JavaScript时,使用单引号更容易:

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

    至少JSON使用双引号来重现字符串 .

    没有简单的方法来回答你的问题

  • 9

    我希望我没有添加明显的东西,但我一直在努力与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中使用单引号 . 它可能会节省一些调试问题......

  • 12

    您可以使用单引号或双引号 . 这使您可以轻松地将JavaScript嵌套在HTML属性中,而无需转义引号 . 当你用PHP创建javascript时也是如此 .

    一般的想法是:如果有可能使用这样的引号,你不需要逃避 . 减少逃避=更好的代码 .

  • 3

    如果你在JavaScript和C#之间跳回来,最好训练你的双手引用的常见约定 .

  • 3

    有些人声称会看到性能差异:old mailing list thread . 但我找不到任何一个被证实 .

    主要是看你在字符串中使用什么样的引号(双或单) . 它有助于保持低逃逸的数量 . 例如,当您在字符串中使用html时,使用单引号更容易,因此您不必转义属性周围的所有双引号 .

  • 1085

    使用CoffeeScript时,我使用双引号 . 我同意你应该选择任何一个并坚持下去 . CoffeeScript在使用双引号时为您提供插值 .

    "This is my #{name}"
    

    ES6正在使用返回刻度(`)作为模板字符串 . 这可能有一个很好的理由,但是在编码时,将字符串文字字符从引号或双引号更改为返回标记以获得插值功能可能很麻烦 . CoffeeScript可能不完美,但在任何地方使用相同的字符串文字字符(双引号)并始终能够插值是一个很好的功能 .

    `This is my ${name}`
    
  • 5

    让我们看一下参考文献的作用 .

    在jquery.js中,每个字符串都是双引号 .

    所以,从现在开始,我将使用双引号字符串 . (我用的是单身!)

  • 3

    检查利弊

    In favor of single quotes

    • 减少视觉混乱 .

    • 生成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()通常就足够了 . 如果没有,请使用模板 .

    In favor of double quotes

    • 如果您没有颜色编码,则更容易发现双打 . 就像在控制台日志或某种视图源设置中一样 .

    • 与其他语言相似:在shell编程中(Bash等),存在单引号字符串文字,但不会在其中解释转义 . C和Java对字符串使用双引号,对字符使用单引号 .

    • 如果希望代码是有效的JSON,则需要使用双引号 .

    In favor of both

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

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

    内部字符串的单引号和外部字符串的双引号 . 这允许您区分内部常量和要显示给用户的字符串(或写入磁盘等) . 显然,你应该避免将后者放在你的代码中,但这并不总能做到 .

  • 25

    如果您的JS源是:

    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>
    

    JS允许这样的数组:

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

    但是,如果你对它进行字符串化,那将是出于兼容的原因:

    JSON=["this","that"]
    

    我相信这需要一些时间 .

  • 115

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

    Douglas Crockford建议对内部字符串使用单引号,对外部使用双引号(外部我们指的是向应用程序用户显示的那些,如消息或警报) .

    我亲自跟着这个 .

    更新:看来Crockford先生changed his mind现在建议使用双引号:)

  • 3

    在不同库中使用single vs double的最可能原因是程序员偏好和/或API一致性 .

    除了一致之外,使用最适合字符串的:

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

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

    ......但这会变得复杂......

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

    另一个选项,ES6中的新选项,是使用 back-tick 字符的Template literals

    alert(`Use "double" and 'single' quotes in the same string`);
    alert(`Escape the \` back-tick character in a string`);
    

    模板文字为以下内容提供了一个干净的语法:变量插值,多行字符串等 .

  • 5

    JavaScript中的单引号和双引号没有区别 .

    规格很重要:

    也许存在性能差异,但它们绝对是最小的,并且可以根据浏览器的实现每天更改 . 除非您的JavaScript应用程序长达数十万,否则进一步的讨论是徒劳的 .

    这就像是一个基准

    a=b;
    

    比...更快

    a = b;
    

    (额外空间)

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

  • 6

    only 差异如下所示:

    'A string that\'s single quoted'
    
    "A string that's double quoted"
    

    所以,这只取决于你想要做多少报价 . 显然,同样适用于双引号字符串中的双引号 .

  • 73

    单引号

    我希望双引号是标准,因为它们是make a little bit more sense,但我一直使用单引号,因为它们占据了场景 .

    单引号:

    没有偏好:

    双引号:

  • 11

    There is no one better solution ;但是,我想有时候双引号可能更令人满意:

    • Newcomers will already be familiar with double quotes from their language . 在英语中,我们必须使用双引号 " 来识别引用文本的段落 . 如果我们使用单引号 ' ,读者可能会将其误解为收缩 . 由 ' 包围的文本段落的另一个含义表示'colloquial'含义 . 与预先存在的语言保持一致是有意义的,这可能会简化代码的学习和解释 .

    • Double quotes eliminate the need to escape apostrophes (如在收缩中) . 考虑字符串: "I'm going to the mall" ,与其他转义版本: 'I\'m going to the mall' .

    • Double quotes mean a string in many other languages . 学习Java或C等新语言时,总是使用双引号 . 在Ruby,PHP和Perl中,单引号字符串表示没有反斜杠转义,而双引号支持它们 .

    • JSON notation is written with double quotes.

    尽管如此,正如其他人所说,保持一致是最重要的 .

  • 9

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

  • 578

    我已经运行了以下约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));
    
  • 4

    还有一件事你可能要考虑作为从双重转变的原因单引号的引号是服务器端脚本的流行程度的增加 . 使用PHP时,您可以使用PHP中的字符串和变量传递变量并解析javascript函数 .

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

    示例:我需要使用服务器中的变量运行javascript函数 .

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

    这为我不得不处理加入字符串带来了很多麻烦,我可以有效地从PHP调用javascript . 这只是一个例子,但这可能是程序员在javascript中默认使用单引号的几个原因之一 .

    Quote from PHP documents:"The most important feature of double-quoted strings is the fact that variable names will be expanded. See string parsing for details. "

  • 55

    严格来说,意义没有区别;所以选择归结为方便 .

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

    • 家居风格:一些开发者团体已经使用了一种约定或另一种约定 .

    • 客户端要求:您是否在字符串中使用引号? (见Ady的回答) .

    • 服务器端语言:VB.Net人们可能会选择对java脚本使用单引号,以便脚本可以在服务器端构建(VB.Net对字符串使用双引号,因此java脚本字符串很容易区分他们是否使用单引号) .

    • 库代码:如果您使用的是使用特定样式的库,您可以考虑自己使用相同的样式 .

    • 个人偏好:你可能会看到一种或其他风格看起来更好 .

相关问题