日期:2014-05-16  浏览次数:20434 次

JavaScript语言规范-来自Google

既然要写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会认为语句没有结束。