当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《何时在JavaScript中使用双引号或单引号?》经验,为你挑选了25个好方法。

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

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



1> Ady..:

在不同库中使用单一与双重的最可能原因是程序员偏好和/或API一致性.

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

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

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

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

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

另一个选项,ES6中的新选项,是使用该字符的模板文字back-tick:

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

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


@Cerebrus - 我觉得这个灵活性还算可以.当然选择一个首选的样式,但如果你需要脱离样式,以保存在一个字符串中转义大量的引号.我会好的.
所有代码约定都需要注意的重要事项 - 定义一次并坚持下去.IOW,不要在某处使用双引号,在其他地方使用单引号.
有点偏离主题,但是如果人们使用正确的排版,很多关于逃避的讨论将会过时:`警告('它是'游戏'时间')`与警报("它是"游戏"时间")` - 没关系 你只需要在(稀少)情况下逃避,其中单个或双重标志`'`,```实际上是合适的.
我认为没有任何理由必须保持一致.任何一个都没有任何优势,我不认为无论你是否在一个地方和另一个地方使用,可读性都会受到影响.
@Olly Hicks,有趣的测试!! 单引号实际上比Chrome 13(OSX)中的双引号要快几倍.有趣...

2> Arne..:

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


属性名称_within_的JSON字符串必须是双引号,但JSON字符串作为一个整体可以单引号:`var jsonString ='{"key1":"value1"}';`(不是我建议手动构建JSON).
如果你可以[`.stringify()`](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify),你不应该手工编写JSON.
这里这是始终使用双引号的最佳参数.JSON应该有双引号.其他答案主要是提供"一致"的建议,这意味着如果语言的任何一部分可能逼真地强制引用双引号,则应始终使用该双引号.
这在使用多种语言时也很重要,几乎所有其他语言(Java,C,C++,...)都使用字符串的双引号和字符的单引号.我更喜欢全面使用相同的引用,因此坚持使用JS的双引号.通过多年的触摸输入,双引号转换的额外键完全无关紧要,如果您的编码受到键入的限制,那么您需要练习正确键入.
当使用jQuery.ajax调用ASP.NET服务(Web服务,页面方法或MVC)时,这非常相关.
@ mister270:http://json.org/具体来说,字符串的定义,"字符串是零个或多个Unicode字符的序列,用双引号括起来,使用反斜杠转义."
@JoshfromQaribou其实我会说相反的.如果有效的JSON需要双引号,那么JavaScript中的字符串应该使用单引号,因为这允许您引用JSON字符串而不会出现问题.

3> user1429980..:

没有更好的解决方案 ; 但是,我想有时候双引号可能更令人满意:

新手已经熟悉他们语言的双引号.在英语中,我们必须使用双引号"来标识引用文本的段落.如果我们使用单引号',读者可能会将其误解为收缩.被文字包围的文本段落的另一个含义'表示"口语"含义.与预先存在的语言保持一致是有意义的,这可能会简化代码的学习和解释.

双引号消除了逃避撇号的需要(如在收缩中).考虑字符串:"I'm going to the mall",与其他转义版本:'I\'m going to the mall'.

双引号表示许多其他语言中的字符串.当您学习Java或C等新语言时,始终使用双引号.在Ruby,PHP和Perl中,单引号字符串表示没有反斜杠转义,而双引号支持它们.

JSON表示法用双引号编写.

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



4> Gareth..:

唯一的区别表现在以下:

'A string that\'s single quoted'

"A string that's double quoted"

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


应该将U + 2019用作撇号,而不是垂直单引号

5> Olegs Jereme..:
单引号

我希望双引号是标准,因为它们更有意义,但我一直使用单引号,因为它们支配着场景.

单引号:

制作的Airbnb

Facebook的

谷歌

咕噜

节点

npm(虽然未在作者指南中定义)

维基媒体

WordPress的

Yandex的

没有偏好:

three.js所

双引号:

克罗克福德

d3(虽然未定义.eslintrc)

jQuery的


@SurajJain来源?[Airbnb](https://github.com/airbnb/javascript#strings--quotes)和[Google](https://google.github.io/styleguide/javascriptguide.xml?showone=Strings#Strings)风格指南仍然列出单一的首选.
克罗克福德现在优先考虑双引号.
谷歌现在优先考虑双引号
airbnb现在优先采用双引号
@SurajJain啊,这些是用JSON编写的代码样式检查器配置,它根本不允许单引号.阅读它们是比较不同项目所做选择的好方法.

6> Mathias Byne..:

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

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

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

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

编辑:这可能解释了Peter-Paul Koch在2003年的测试结果.

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

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


如果在一个浏览器中以一种方式稍微快一点,而在另一个浏览器中稍微快一些,那么另一种方式就是这样做,我们可以拿走的唯一指导就是我们应该做任何我们喜欢的事情,因为它会伤害一些用户和帮助他人,差异的可能性是难以察觉的."过早优化......"等等.
AFAIK这是在Firefox 17中修复的,Firefox在执行`.toString`时用来做反编译,但现在它返回原始副本.现代firefox不会有这个问题.
不知道速度差异.但是我想要注意"这给人的印象是至少有一个浏览器在内部解析JavaScript,好像所有东西都是用双引号编写的." 是胡说八道.它被解析,好像用双引号写的.也就是说,它将其内部表示(仅存储字符串,而不是引号)转换为人类可读的版本,为此恰好使用一组引号.无论如何,根据本杰明的评论,这似乎已经改变了.
对不起,我的评论不太具有建设性.我只是说浏览器如何选择显示其语法的内部表示可能与解析它的方式几乎没有关系,因此可能不是一种理由更喜欢一种类型的引号而不是另一种.另一方面,比较浏览器中单引号和双引号的分析时间的性能数据将更具吸引力.

7> Tom Lianza..:

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

例如,这很好用:

hi

但是你不能通过我所知道的任何转义方法将"hi"包装在双引号中.即使"哪个是我最好的猜测(因为你在HTML的属性值中转义引号)在Firefox中对我不起作用. \"也不会工作,因为此时你正在逃避HTML,而不是JavaScript.

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


同意可以说是坏事,但如果必须这样做,我很确定可以使用URL样式编码,例如` - 从内存中可行,但它可能在href属性中而不是`
@Tom Lianza,肯定`alert("hi")`是无效的JavaScript.但是属性的值被编码.http://www.w3.org/TR/html4/intro/sgmltut.html#didx-attribute
同意@Robert在这里.```是在HTML属性中转义双引号的正确方法.它在Firefox中运行良好.@Denilson,XML(以及XHTML)允许单引号和双引号.请参阅http://www.w3.org/TR/REC-xml/#d0e888中XML规范中的`AttValue`文字.
@PhiLho你是对的...我假设人们正在编写传统的双引号HTML属性,并且不会(1)批量将所有内容转换为单引号,或者(2)混合匹配单引号和双引号属性.但是,是的,你是对的,这是合法的

8> Mariusz Nowa..:

从技术上讲,没有区别,只有风格和惯例才有问题.

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

我亲自关注.

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


Douglas Crockford对阵JQuery.选择你的毒药.
截至2016年4月,Douglas Crockford [现推荐](https://plus.google.com/+DouglasCrockfordEsq/posts/EBky2K9erKt)仅使用双引号,因为在实践中,许多开发人员发现内部与外部二分法难以使用.

9> Kramii Reins..:

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

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

房屋风格:一些开发商团体已经使用一种或多种惯例.

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

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

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

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



10> 小智..:

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

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

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


为什么这会被投票.这是一个风格问题,最好的风格是保持一致,并跟随那些来到你面前的人.
也许jQuery未能跟随他们之前的人(或者像大多数其他专家一样真的不关心).;)

11> mariotti..:

我希望我没有添加一些明显的东西,但我一直在努力研究Django和Ajax以及JSON.

假设在你的HTML代码中你确实使用双引号,正如通常应该的那样,我强烈建议在JavaScript中使用单引号.

所以我同意@ady,但要小心.

我的底线是:在JavaScript中可能无关紧要,但只要将其嵌入HTML或类似内容中,您就会开始遇到麻烦.你应该知道什么是实际逃逸,阅读,传递你的字符串.

我的简单案例是:

tbox.innerHTML = tbox.innerHTML + '

' + myThis[i].fields.title +' ' + myThis[i].fields.description +'

'

你可以在showThis的第三个字段中找到\'.

双引号不起作用!

很清楚为什么,但也很明显为什么我们应该坚持单引号......我猜...

这种情况是一个非常简单的HTML嵌入,错误是通过"双引号"JavaScript代码中的简单复制/粘贴生成的.

所以回答这个问题:

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



12> cavalcade..:

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

如果你是在公司或团队中编码,那么遵循"家庭风格"可能是一个好主意.

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

如果两种惯例同等使用,按照您的个人
喜好.

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

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



13> abhisekp..:

只需保持您使用的一致性.但是不要失望你的舒适程度.

"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更新

使用模板文字语法.

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



14> 小智..:

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

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


这不是以往某种方式完成的事情,现在又是另一种方式.不同的语言处理报价的方式不同,有些语言可以按照您的描述进 但这是一个*JavaScript*问题.单引号和双引号在JavaScript中的处理方式相同(除了允许在字符串中使用其他类型的引用而不进行转义).不存在双引号允许控制字符或字符串插值的问题.JavaScript不能像那样工作.控制字符和转义序列与您使用的引用类型相同.

15> 小智..:

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

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

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

var foo = '
Cool content
';

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

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


您可以配置jshint以接受其中任何一个.

16> Juan C. Rold..:

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

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

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

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



17> John Kurlak..:

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


@codewandler此外,必须键入shift,即使我可以并行执行,也不允许左小指准备在"无论你输入什么内容后输入下一个字符.

18> Divyesh Kanz..:

检查利弊

赞成单引号

减少视觉混乱.

生成HTML:HTML属性通常用双引号分隔.

elem.innerHTML = 'Hello';


19> Dodzi Dzakum..:

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

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

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

public static function redirectPage( $pageLocation )
{
    echo "";
}

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

引用PHP文档:"双引号字符串最重要的特性是变量名称将被扩展.有关详细信息,请参阅字符串解析."


我想如果你是从PHP类方法在你的页面上编写JavaScript,你会遇到更大的问题.

20> Michiel Over..:

有些人声称会看到性能差异:旧的邮件列表线程.但我找不到任何一个被证实.

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



21> Gumbo..:

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

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

代替:

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



22> 小智..:

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

规格很重要:

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

这就像是一个基准

a=b;

比...更快

a = b;

(额外空间)

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


没有空格更快.字符串中要解析的字符越少.:p

23> GijsjanB..:

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

"This is my #{name}"

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

`This is my ${name}`



24> Bastiaan Lin..:

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


换句话说,你发现后面的代码运行得最快.这是进行微基准测试时的问题.您必须考虑JS引擎在运行时优化代码.(由于JIT的工作方式,在Java基准测试时会看到同样的效果.)
第一个新日期很慢,将`var dummy_date = new Date()`添加到开头

25> moomoo..:

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

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有