有关此问题的几个问题:
我的意思是这样的东西:
#myElement {
position: absolute;
top: 0;
left: 0
}
答案 0 :(得分:74)
这是好的做法吗?
手动排除分号是不好的做法。这纯粹是因为在添加更多样式时很容易忽略,特别是如果你在团队中工作:
想象一下你从:
开始.foo {
background-color: #F00;
color: #000 <-- missing semi-colon
}
然后有人添加了一些风格:
.foo {
background-color: #F00;
color: #000 <-- missing semi-colon
width: 30px;
z-index: 100;
}
突然间,另一位开发人员正在浪费时间弄清楚为什么他们的width
声明无法正常工作(或者更糟糕的是,没有注意到它不起作用)。将分号留在
是否会大规模地产生更好的加载时间?
绝对是,对于每个块,你可以节省几个字节。这些加起来,特别是对于大型样式表。不要自己担心这些性能提升,最好使用CSS压缩器,例如YUI Compressor来自动删除结束的分号。
是否会导致浏览器破解?
不,这是安全的,因为浏览器正确地实现了规范的这一部分。 The CSS2 specification因此定义了一个声明:
声明为空或由属性名称组成,后跟冒号(:),后跟属性值。
更重要的是:
...同一个选择器的多个声明可以组织成分号(;)分隔的组。
这意味着;
用于分隔多个声明,但不需要终止它们。
Javascript中的最后一个函数是否相同?
JavaScript是一个完全不同规格的完全不同的野兽。这个特殊问题已经得到了深入的回答many times before on Stack Overflow。
答案 1 :(得分:9)
不,省略分号会在您的应用程序中引入大量风险,如果您为元素添加更多样式,将很容易忽略添加它。此时,您依赖于您的手动流程和对细节的关注,以确保您没有意外地错位您的非分号行。更糟糕的是,每次准备好进行制作时,你都必须亲自检查你的css文件,以确保你没有搞砸每个元素中的任何最终样式行。
可能,因为文件会更小,但差异应该可以忽略不计。如果您担心加载时间,在将文件放到服务器上之前Gzipping文件将为您提供良好的服务。
大多数浏览器都足够聪明,知道你的意思,但你仍然不必担心因为不注意最后一种风格而搞砸你的CSS文件。
答案 2 :(得分:4)
在我看来,没有。如果在最后一条规则下添加规则,则很容易忘记添加分号。
无法想象它会在加载时间方面产生很大的影响。
不,分号只需要在CSS块中分隔规则。分号是分隔符,而不是终结符。
是的,不要将它留在JavaScript解释器中添加分号。
答案 3 :(得分:1)
它会稍微改善加载时间。有足够大的CSS文件,它甚至可以引人注目(好吧,整体缩小可以;我怀疑只是删除最后一个分号就足够了。)
但是,如果您非常关心加载时间,那么您应该使用程序来缩小CSS,而不是手动尝试。缩小的CSS(几乎)无法读取。在“源代码”中使用它是一种不好的做法,因为它很容易忘记它。
答案 4 :(得分:1)
这是一个重复的问题。见这里:
关于在JavaScript中应用分号,函数不应以分号结尾,除非它们以声明方式分配,即。 var a = function() {};
但是,如果您无意中(或故意)将它们排除在外,浏览器会执行自动分号插入。
答案 5 :(得分:1)
删除declaration stops不会“破坏”浏览器,但仍应留给自动缩小器(特别是如果你关心加载时间 - 单独的分号不会累加太多)但是应该避免使用可维护性原因的来源。
如果您正在寻找最佳做法,那么Google css样式指南中的CSS formatting rules是一个非常好的起点 - 不要盲目地应用他们的建议,而是要了解他们背后的推理。
每次声明后都使用分号。用a结束每个声明 分号是出于一致性和可扩展性的原因。
/* Not recommended */
.test {
display: block;
height: 100px
}
/* Recommended */
.test {
display: block;
height: 100px;
}
Javascript是一个不同的故事 - 简短的回答是始终使用分号,从不依赖于隐式插入,但我从未见过比Google {{{ 3}}:
有几个地方特别缺少分号 危险:
// 1.
MyClass.prototype.myMethod = function() {
return 42;
} // No semicolon here.
(function() {
// Some initialization code wrapped in a function to create a scope for locals.
})();
var x = {
'i': 1,
'j': 2
} // No semicolon here.
// 2. Trying to do one thing on Internet Explorer and another on Firefox.
// I know you'd never write code like this, but throw me a bone.
[normalVersion, ffVersion][isIE]();
var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] // No semicolon here.
// 3. conditional execution a la bash
-1 == resultOfOperation() || die();
那会发生什么?
- JavaScript错误 - 首先调用返回函数42 第二个函数作为参数,然后数字42被“调用” 导致错误。
- 你很可能会得到'没有这样的财产 运行时尝试调用
除非x[ffVersion][isIE]()
时出现“未定义”错误。die
为resultOfOperation()
且NaN
获得,否则会调用- 的结果 醇>
THINGS_TO_EAT
分配了die()
。为什么?
JavaScript要求语句以分号结尾,除非是分号 认为它可以安全地推断它们的存在。在每个例子中, 一个函数声明或对象或数组文字在一个内部使用 声明。结束括号不足以表示结束 该声明。如果下一个令牌是,Javascript永远不会结束语句 中缀或支架运算符。
这让人很惊讶,所以请确保你的作业结束 用分号。
答案 6 :(得分:0)
这是好的做法吗?
我会回避它,因为聪明的缩小过程会为你处理这个问题,如果你在添加新定义时忘记放置分号,就会引入错误。
它会大规模地产生更好的加载时间吗?
是的,文件较小。虽然,差异可以忽略不计,缩小过程会自动执行此操作。
是否会导致浏览器“破解”?
没有
对于Javascript(/ jQuery)中的最后一个函数是否一样?
不,在函数语句末尾排除分号是“无效的”。
答案 7 :(得分:0)
根据我的经验,1)这不是好的做法2)即使在非常大的规模上,加载时间也是微不足道的。 3)不知道任何浏览器会破坏它。 4)同样适用于jQuery
答案 8 :(得分:0)
对于CSS,我在IE9,FF,GC,Safari和Opera上试过这个,但它没有什么区别。
至于Javascript,我在FF和GC上遇到错误,所以我想说不要在脚本上执行此操作。至于加载时间,差异将无论如何都不会明显。