【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

  • 语句必须都有分号结尾,除了for, function, if, switch, try, while。
  • 如果仅依靠语句间的隐式分隔, 有时会很麻烦,你自己更能清楚哪里是语句的起止。而且有些情况下, 漏掉分号会很危险:

 

MyClass.prototype.myMethod = function() {
	 return 42;
}  //这里没有分号

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

 

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

避免额外的逗号。
错误的写法
var arr = [1,2,3,];//数组最后一个逗号不必要存在
FR.Ajax({
	url:'http://someurl',
	data:{'paraA':'aa','paraB':'bb'},//作为一个json对象,这里的逗号是多余的,且在IE下可能抛错
});
正确的写法
var arr = [1, 2, 3];
var ajaxConfig = {
	 url:'http://someurl',
	 data:{'paraA':'aa','paraB':'bb'}
};

 

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

 

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

 

  • 不要使用with, void, eval。

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

下面类型的对象不建议用new构造:new Number, new String, new Boolean, new Object, new Array。
不推荐的写法
var obj = new Object();
var arr = new Array();
正确的写法
var obj = {};
var arr = [];

 

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

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

 

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

 

 
  • 除开特定变量以外,声明变量必须加上 var 关键字。当你没有写 var, 变量就会暴露在全局上下文中, 这样很可能会和现有变量冲突. 另外, 如果没有加上, 很难明确该变量的作用域是什么, 变量也很可能像在局部作用域中, 很轻易地泄漏到 Document 或者 Window 中, 所以务必用 var 去声明变量。(eason:我觉得还要注意的一点是js没有不像java一样有默认的块作用域,对var更准确的理解,是在当前作用域里查找该标志符,如果没有,则在当前作用域里注册该标志符)
错误的写法
FS = {};
FR = {};
contentPane = {};
正确的写法
window.FS = {};
window.FR= {};
window.contentPane = {};
  • 使用FR.ajax()函数替代$.ajax()函数,不要使用FR.get()、FR.post()、$.get()和$.post()。

FR.ajax()函数会对data自动进行编码,避免了参数编码错误

不推荐的写法
$.ajax({
      url : "http://www.baidu.com",
      data: {"keywords": "中文"},
       success : function() {
           // do something
       }
  });
正确的写法
FR.ajax({
    url : "http://www.baidu.com",
    data: {"keywords": "中文"},
     success : function() {
         // do something
     }
});

 

  • 私有方法以下划线(_)开头做标记。

以下划线标记私有方法增加代码的可读性。

不推荐的写法
FR.Button = FR.extend(FR.Widget, { 
    defaultConfig: function () {
        return {cls : 'fr-btn'};
    }
};
正确的写法
FR.Button = FR.extend(FR.Widget, { 
    _defaultConfig: function () {
        return {cls : 'fr-btn'};
    }
};

 

  • 不能使用new Date("2014-01-01")这样的日期函数。改用new Data(年,月,日,时,分,秒)。

前者的函数存在浏览器兼容问题,低版本的IE是不支持的。

错误的写法
var date = new Date("2014-01-01");
正确的写法
var date = new Date(2014, 1,1);
  • No labels