google编程规范js部分笔记
语言规则:
1.总是用var声明变量
2.不要用const关键字,就用大写变量来表示
3.总是使用分号;特别注意函数声明后面。
4.嵌套函数很有用,多用用
5.不要在块中使声明函数:
别这么做:
if (x) {
function foo() {}
}
这和ECMAScript不一致,在这里应该这样:
if (x) {
var foo = function() {}
}
6.不要在创建基本类型时用new
7.为构造函数添加函数最好用:
Foo.prototype.bar = function() {
/* ... */}
8.用闭包,但是要小心
闭包是指有权访问其他函数作用域中的变量的函数。js中闭包是一个非常有用的东西。但是用闭包也要小心,因为闭包会引用包含它的函数的活动对象,所以有可能会引起内存无法销毁。例如:
function foo(element, a, b) {
element.onclick = function() { /* uses a and b */ };
}
函数闭包引用了foo活动对象(element,a,b),而element也引用了闭包(通过onclick),这就产生了循环引用,此时就内存就不会被销毁。可以这么做:
function foo(element, a, b) {
element.onclick = bar(a, b);
}
function bar(a, b) {
return function() { /* uses a and b */ }
}
另一种情况例如上面的bar函数,如果声明一个变量将bar函数返回的函数(闭包)赋值给变量,那么函数执行完后闭包不会被销毁,因为有变量引用,这样的话bar函数也不会被销毁,因为闭包还有对其活动对象的引用。此时要对声明的变量赋值null。
8.eval()只在序列化中使用
eval函数导致了复杂的语义并且当有有用户输入的时候会有危险。
9.不要用with(){}
10.this只在构造函数,方法和闭包中使用。使用this比较容易出错。
11.for-in loop
不要在数组中使用,在类,映射和hash中使用就行。
12.不要将Array用作map/hash或关联数组。
13.不要这样做:
var myString = 'A rather long string of English text, an error message \
actually that just keeps going and going -- an error \
message to make the Energizer bunny blush (right through \
those Schwarzenegger shades)! Where was I? Oh yes, \
you\'ve got an error and all the extraneous whitespace is \
just gravy. Have a nice day.';
斜杠换成加号。
14.创建数组时不要用new Array,因为当第一个参数不是数字时将会有异常。所以一般用var str = [arg1,arg2...]。
类的创建不会有错,但是为了统一,类的创建也写成var obj = {arg1:arg1,arg2:arg2...}。
15.不要修改内建对象的prototype,即使是内建函数也尽量不要。
16.不要用浏览器的条件注释