aem*_*kei 1903 javascript string conventions
console.log("double");
VS console.log('single');
在处理字符串时,我看到越来越多的JavaScript库使用单引号.使用其中一个的原因是什么?我以为它们几乎可以互换.
Ady*_*Ady 1179
在不同库中使用单一与双重的最可能原因是程序员偏好和/或API一致性.
除了一致之外,使用最适合字符串的:
使用其他类型的引用作为文字:
alert('Say "Hello"');
alert("Say 'Hello'");
Run Code Online (Sandbox Code Playgroud)
......但这会变得复杂......
alert("It's \"game\" time.");
alert('It\'s "game" time.');
Run Code Online (Sandbox Code Playgroud)
另一个选项,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`);
Run Code Online (Sandbox Code Playgroud)
模板文字为以下内容提供了清晰的语法:变量插值,多行字符串等.
Arn*_*rne 610
如果您正在处理JSON,应该注意严格来说,JSON字符串必须是双引号.当然,许多库也支持单引号,但在我意识到单个引用字符串实际上不符合JSON标准之前,我在其中一个项目中遇到了很大问题.
use*_*980 322
没有更好的解决方案 ; 但是,我想有时候双引号可能更令人满意:
"
来标识引用文本的段落.如果我们使用单引号'
,读者可能会将其误解为收缩.被文字包围的文本段落的另一个含义'
表示"口语"含义.与预先存在的语言保持一致是有意义的,这可能会简化代码的学习和解释."I'm going to the mall"
,与其他转义版本:'I\'m going to the mall'
.双引号表示许多其他语言中的字符串.当您学习Java或C等新语言时,始终使用双引号.在Ruby,PHP和Perl中,单引号字符串表示没有反斜杠转义,而双引号支持它们.
JSON表示法用双引号编写.
尽管如此,正如其他人所说的那样,保持一致是最重要的.
Gar*_*eth 116
该唯一的区别表现在以下:
'A string that\'s single quoted'
"A string that's double quoted"
Run Code Online (Sandbox Code Playgroud)
所以,这只取决于您想要做多少报价.显然,同样适用于双引号字符串中的双引号.
Ole*_*evs 85
我希望双引号是标准,因为它们更有意义,但我一直使用单引号,因为它们支配着场景.
单引号:
没有偏好:
双引号:
Mat*_*ens 56
我想说的不同之处纯粹是风格,但我真的很怀疑.请考虑以下示例:
/*
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);
Run Code Online (Sandbox Code Playgroud)
在Safari,Chrome,Opera和Internet Explorer(在IE7和IE8中测试)中,这将返回以下内容:
function () {
return this.replace(/^\s+|\s+$/g, '');
}
function trim(str) {
return str.replace(/^\s+|\s+$/g, '');
}
Run Code Online (Sandbox Code Playgroud)
但是,Firefox会产生稍微不同的结果:
function () {
return this.replace(/^\s+|\s+$/g, "");
}
function trim(str) {
return str.replace(/^\s+|\s+$/g, "");
}
Run Code Online (Sandbox Code Playgroud)
单引号已被双引号替换.(还要注意缩进空间是如何被四个空格替换的.)这给人的印象是至少有一个浏览器在内部解析JavaScript,好像所有内容都是用双引号编写的.有人可能会认为,如果所有内容都已根据此"标准"编写,则需要花费较少的时间来解析JavaScript.
顺便说一下,这让我成为一只非常悲伤的熊猫,因为我认为单引号在代码中看起来更好.另外,在其他编程语言中,它们通常比双引号更快使用,因此只有在应用于JavaScript时才有意义.
结论:我认为我们需要对此进行更多研究.
编辑:这可能解释了Peter-Paul Koch在2003年的测试结果.
在资源管理器Windows中,单引号似乎有时更快(大约1/3的测试确实显示出更快的响应时间),但如果Mozilla完全显示出差异,则它会稍快处理双引号.我发现Opera没有任何区别.
编辑2014:现代版本的Firefox/Spidermonkey不再这样做了.
Tom*_*nza 31
如果您正在使用内联JavaScript(可以说是一个"坏"的东西,但是避免讨论)单引号是字符串文字的唯一选择,我相信.
例如,这很好用:
<a onclick="alert('hi');">hi</a>
Run Code Online (Sandbox Code Playgroud)
但是你不能通过我所知道的任何转义方法将"hi"包装在双引号中.即使"
哪个是我最好的猜测(因为你在HTML的属性值中转义引号)在Firefox中对我不起作用. \"
也不会工作,因为此时你正在逃避HTML,而不是JavaScript.
因此,如果游戏的名称是一致的,并且您将在应用程序的某些部分中执行一些内联JavaScript,我认为单引号是赢家.如果我错了,请有人纠正我.
Mar*_*wak 29
从技术上讲,没有区别,只有风格和惯例才有问题.
Douglas Crockford建议对内部字符串使用单引号,对外部使用双引号(外部我们指的是向应用程序用户显示的那些,如消息或警报).
我亲自关注.
更新:Crockford先生似乎改变主意,现在建议在整个过程中使用双引号:)
Kra*_*ica 26
严格来说,意义上没有区别; 所以选择归结为方便.
以下几个因素可能会影响您的选择:
小智 18
让我们看一下参考文献的作用.
在jquery.js中,每个字符串都是双引号.
所以,从现在开始,我将使用双引号字符串.(我用的是单身!)
mar*_*tti 13
我希望我没有添加一些明显的东西,但我一直在努力研究Django和Ajax以及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>'
Run Code Online (Sandbox Code Playgroud)
你可以在showThis的第三个字段中找到\'.
双引号不起作用!
很清楚为什么,但也很明显为什么我们应该坚持单引号......我猜...
这种情况是一个非常简单的HTML嵌入,错误是通过"双引号"JavaScript代码中的简单复制/粘贴生成的.
所以回答这个问题:
尝试在HTML中使用单引号.它可能会节省一些调试问题......
cav*_*ade 13
这主要是风格和偏好的问题.在其他答案中有一些相当有趣和有用的技术探索,所以也许我唯一可能添加的是提供一些世俗的建议.
如果你是在公司或团队中编码,那么遵循"家庭风格"可能是一个好主意.
如果你独自攻击一些辅助项目,那么请看一下社区中的一些杰出领导者.比如让我们说你进入了Node.js. 看看核心模块,例如underscore.js或表达他们使用的约定,并考虑遵循这一点.
如果两种惯例同等使用,则按照您的个人
喜好.
如果您没有个人喜好,那就掷硬币.
如果你没有硬币,那么啤酒就在我身上;)
abh*_*ekp 13
只需保持您使用的一致性.但是不要失望你的舒适程度.
"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
Run Code Online (Sandbox Code Playgroud)
ES6更新
使用模板文字语法.
`Be "my" guest. You're in complete freedom.`; // most comfort :D
Run Code Online (Sandbox Code Playgroud)
小智 12
不确定这在当今世界是否相关,但是双引号曾用于需要处理控制字符的内容,而单引号则用于没有处理控制字符的字符串.
编译器将对双引号字符串运行字符串操作,同时保留单引号字符串字面上不变.这曾经导致'好'开发人员选择对不包含控制字符的字符串使用单引号(\n
或\0
不在单引号内处理)和双引号时需要解析字符串(在cpu周期中略有成本)处理字符串).
Met*_*maX 12
如果您使用的是jshint,则在使用双引号字符串时会引发错误.
我通过AngomanJS的Yeoman脚手架使用它,但也许有某种方式来配置它.
顺便说一下,当你将HTML处理成JavaScript时,使用单引号更容易:
var foo = '<div class="cool-stuff">Cool content</div>';
Run Code Online (Sandbox Code Playgroud)
并且至少JSON使用双引号来重现字符串.
没有简单的方法来回答你的问题
Jua*_*dán 10
谈到性能,引用永远不会成为你的瓶颈,但是,两种情况下的性能都是相同的.
谈论编码速度,如果'
用于分隔字符串,则需要转义"
引号."
在示例中,您更可能需要在字符串中使用:
//JSON Objects:
var jsonObject = '{"foo":"bar"}';
//HTML attributes:
document.getElementById("foobar").innerHTML = '<input type="text">';
Run Code Online (Sandbox Code Playgroud)
然后,我更喜欢'
用于分隔字符串,所以我必须逃避更少的字符.
Joh*_*lak 10
使用单引号的一个(愚蠢)理由是它们不需要您按Shift键来键入它们,而双引号则需要.(我假设平均字符串不需要转义,这是一个合理的假设.)现在,让我们假设我每天编写200行代码.也许在这200行中我有30个引号.也许输入双引号比输入单引号花费0.1秒(因为我必须按下shift键).然后在任何一天,我浪费3秒.如果我以这种方式编码,每年200天,40年,那么我浪费了6.7小时的生命.值得深思.
检查利弊
赞成单引号
elem.innerHTML = '<a href="' + url + '">Hello</a>';
Run Code Online (Sandbox Code Playgroud)
elem.innerHTML = "<a href='" + url + "'>Hello</a>";
Run Code Online (Sandbox Code Playgroud)
此外,内联HTML通常是反模式.喜欢模板.
myJson = '{ "hello world": true }';
Run Code Online (Sandbox Code Playgroud)
同样,您不必以这种方式构造JSON.JSON.stringify()通常就足够了.如果没有,请使用模板.
赞成双引号
赞成两者
JavaScript中的两者没有区别.因此,您可以使用目前方便的任何方式.例如,以下字符串文字都生成相同的字符串:
"He said: \"Let's go!\""
'He said: "Let\'s go!"'
"He said: \"Let\'s go!\""
'He said: \"Let\'s go!\"'
Run Code Online (Sandbox Code Playgroud)
内部字符串的单引号和外部字符串的双引号.这允许您区分内部常量和要显示给用户的字符串(或写入磁盘等).显然,你应该避免将后者放在你的代码中,但这并不总是可以做到的.
您可能需要考虑的另一件事是从双引号转换为单引号的原因是服务器端脚本的流行度增加.使用PHP时,您可以使用PHP中的字符串和变量传递变量并解析javascript函数.
如果您编写一个字符串并为PHP使用双引号,则不必转义任何单引号,PHP将自动为您检索变量的值.
示例:我需要使用服务器中的变量运行javascript函数.
public static function redirectPage( $pageLocation )
{
echo "<script type='text/javascript'>window.location = '$pageLocation';</script>";
}
Run Code Online (Sandbox Code Playgroud)
这为我不得不处理加入字符串带来了很多麻烦,我可以有效地从PHP调用javascript.这只是一个例子,但这可能是程序员在javascript中默认使用单引号的几个原因之一.
引用PHP文档:"双引号字符串最重要的特性是变量名称将被扩展.有关详细信息,请参阅字符串解析."
当单引号不能使用时我会使用双引号,反之亦然:
"'" + singleQuotedValue + "'"
'"' + doubleQuotedValue + '"'
Run Code Online (Sandbox Code Playgroud)
代替:
'\'' + singleQuotedValue + '\''
"\"" + doubleQuotedValue + "\""
Run Code Online (Sandbox Code Playgroud)
小智 6
JavaScript中的单引号和双引号没有区别.
规格很重要:
也许存在性能差异,但它们绝对是最小的,并且可以根据浏览器的实现每天更改.除非您的JavaScript应用程序长达数十万,否则进一步的讨论是徒劳的.
这就像是一个基准
a=b;
Run Code Online (Sandbox Code Playgroud)
比...更快
a = b;
Run Code Online (Sandbox Code Playgroud)
(额外空间)
今天,在特定的浏览器和平台等
使用CoffeeScript时,我使用双引号.我同意你应该选择任何一个并坚持下去.CoffeeScript在使用双引号时为您提供插值.
"This is my #{name}"
Run Code Online (Sandbox Code Playgroud)
ES6正在使用返回刻度(`)作为模板字符串.这可能有一个很好的理由,但是在编码时,将字符串文字字符从引号或双引号更改为返回标记以获得插值功能可能很麻烦.CoffeeScript可能不完美,但在任何地方使用相同的字符串文字字符(双引号)并始终能够插值是一个很好的功能.
`This is my ${name}`
Run Code Online (Sandbox Code Playgroud)
严格来说没有区别,所以这主要是一个品味和字符串中的内容(或者 JavaScript 代码本身是否在字符串中)的问题,以保持较低的转义次数。
速度差异图例可能来自 PHP 世界,其中两个引号具有不同的行为。
我已经运行了以下约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));
Run Code Online (Sandbox Code Playgroud)
现在是 2020 年,我们应该考虑 JavaScript 的第三种选择:所有事物的单反引号。
这可以在任何地方使用,而不是单引号或双引号。
它可以让你做所有的事情!
在其中嵌入单引号: `太棒了!`
在其中嵌入双引号: `它“真的”很棒!`
使用字符串插值: `它比“${better}”更好!`
它允许多行: `
这个
使
JavaScript
更好的!
`
在替换其他两个字符串时,它也不会造成任何性能损失: 反引号 (``) 是否比 JavaScript 中的其他字符串慢?
归档时间: |
|
查看次数: |
583555 次 |
最近记录: |