日期:2014-05-16 浏览次数:20457 次
既然要写JS,必须要遵循一定的编程规范吧。以下是来自Google的JS语言规范,直接翻译过来的(可参考英文原版)。
1,变量:大部分情况下请使用var声明
如果不显示使用var,这个变量就会被附着在全局上下文中,可能引起重名的冲突。而且,如果不使用var声明,也 很难分辨这个变量的作用域(如:可能附着在Document或Window对象上,也可能附着在局部变量上)。所以,大部 分情况下使用var来声明变量。
当然,如果申请一个只属于某一个“类”的变量,则不要使用var。如jQuery(版本为1.6.4)中为jQuery的第41 行,要为jQuery对象增加属性,所以不能使用var来声明。
2,常量:使用NAME_LIKE_THIS的命名方法,适当使用@const,不要使用const关键词。
对于简单的“非引用”类型,这种命名方法足矣。如:
/**
* The number of seconds in a minute.
* @type {number}
*/
goog.example.SECONDS_IN_A_MINUTE = 60;
?
对于“引用”类型,使用@const注解。如:
/**
* The number of seconds in each of the given units.
* @type {Object.<number>}
* @const
*/
goog.example.SECONDS_TABLE = {
minute: 60,
hour: 60 * 60
day: 60 * 60 * 24
}
? 这样可以保证编译器保证常量的意义。
至于const关键字,由于IE不支持,所以不要使用。
3,分号:使用之。
不显式使用分号,有可能导致难以察觉的问题。特别是如下几处:
//1.
MyClass.prototype.myMethod = function(){
return 42;
} // 这里没有分号
(function(){
//初始化一些变量,作用域为该匿名函数
})();
var x = {
'i':1,
'j':2
} //这里没有分号
//2.
[normalVersion,ffVersion][isIE]();
var THINGS_TO_EAT = [apples,oysters,sprayOnCheese] //没有分号
//3.
-1 == resultOfOperation() || die();
? 发生什么呢?
第一处:JS错误-首先,返回24的函数会执行,因为后面有一个圆括号,而且参数是一个函数;然后返回值42 被调用,出错。
第二处:执行的时候你非常可能得到一个“no such property in undefined”的错误,因为实际上是在执行 x[ffVersion][isIE]()这个函数。
第三处:函数die只有在resultOfOperation()为NaN,THINGS_TO_EAT会被赋值成die()的返回值。
为什么呢?
JS的语法要求一个语句要以分号结尾,除非能安全的推断出分号的位置。在上述例子中,函数声明,对象声明, 数组等被用在一个语句中。类似如“}”,“]”的符号不足以证明语句的结束。如果下一个字符是运算符或者"{","[",则 JS会认为语句没有结束。