Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejs
title示例代码
MyClass.prototype.myMethod = function() {
	 return 42;
}  //这里没有分号

(function() {
	 // 做一些初始化的事情
})();

 

上面这段语句会报 JavaScript 错误 。上的语句会解释成, 一个函数带一匿名函数作为参数而被调用, 返回42后, 又一次被"调用", 这就导致了错误。

...

Code Block
languagejs
title正确的写法
var arr = [1, 2, 3];
var ajaxConfig = {
	 url:'http://someurl',
	 data:{'paraA':'aa','paraB':'bb'}
};

 

 

Note

所有的循环体和判断体都需要用"{}"括起来。

 

Code Block
languagejs
title不推荐的写法
if (condition)statement;
Code Block
languagejs
title正确的写法
if (condition) { 
	statement; 
}

 

Note

不要使用with, void, eval。

 

eval() 会让程序执行的比较混乱, 当 eval() 里面包含用户输入的话就更加危险. 可以用其他更佳的, 更清晰, 更安全的方式写你的代码, 所以一般情况下请不要使用 eval(). 当碰到一些需要解析序列化串的情况下(如, 计算 RPC 响应), 使用 eval 很容易实现。
使用 with 让你的代码在语义上变得不清晰. 因为 with 的对象, 可能会与局部变量产生冲突, 从而改变你程序原本的用义。

...

Code Block
languagejs
title正确的写法
var obj = {};
var arr = [];

 

 

Note

for-in循环只用于object/map/hash的遍历,而不要用于数组的遍历。

 

对 Array 用 for-in 循环有时会出错. 因为它并不是从 0 到 length - 1 进行遍历, 而是所有出现在对象及其原型链的键值. 下面就是一些失败的使用案例:

 

Code Block
languagejs
function printArray(arr) {
  for (var key in arr) {
    print(arr[key]);
  }
}
printArray([0,1,2,3]);   // 这个正常工作
var a = new Array(10);
printArray(a);   // 这个就会出错了
Code Block
languagejs
title错误的写法
var arr = ['aa', 'bb', 'cc', 'dd'];
for (var el in arr) {
    // do something with el;
}
Code Block
languagejs
title正确的写法
var arr = ['aa', 'bb', 'cc', 'dd'];
for (var i = 0, len = arr.length; i < len; i ++) {
      var el = arr[i];
      // do somthing with el;
}
Note

除开特定变量以外,声明变量必须加上 var 关键字。

当你没有写 var, 变量就会暴露在全局上下文中, 这样很可能会和现有变量冲突. 另外, 如果没有加上, 很难明确该变量的作用域是什么, 变量也很可能像在局部作用域中, 很轻易地泄漏到 Document 或者 Window 中, 所以务必用 var 去声明变量。(eason:我觉得还要注意的一点是js没有不像java一样有默认的块作用域,对var更准确的理解,是在当前作用域里查找该标志符,如果没有,则在当前作用域里注册该标志符)

...