编码规范

前端编码规范

最近写的项目越来越大,代码堆积的太多,自己看着都头疼下决心整理了下,  
着实一个浩大的工程hh,花了我三个晚上,效果还是有那么点的,
顺便把遇到的整理下,写博客在于记忆,以后回来看看好知道我曾经这么菜。

JS篇

  • 三元条件判断
    用三元操作符分配或返回语句替换简单的if语句

不推荐

if(x === 0) {    
    return '00';   
    } else {    
     return x; 
}       

推荐

return x === 4 ? '00' : x;      
  • for循环
    数组的长度,使用一个变量来接收

不推荐

for(var i=0;i<arr.length,i++){
}       

推荐

for(var i=0,len=arr.length;i<len,i++){
}    
  • DOM操作
    对于重复的dom操作,使用一个变量来进行接收

不推荐

$('.onSelect').text('1');
$('.onSelect').text('2');
$('.onSelect').text('3');
$('.onSelect').text('4');

推荐

var sel=$('.onSelect');
sel.text('1');
sel.text('2');
sel.text('3');
sel.text('4');
  • 立即执行函数
    推荐在立即执行函数开始跟结尾都添加上分号,避免在合并时因为别人的代码不规范而影响到我们自己的代码,如果有用到全局变量应该通过变量传递的方式,让立即执行函数的函数体在调用时,能以局部变量的形式调用,在一定程度上提升程序性能。

不推荐

(function(){
'use strict';
var x = 10,
    y = 100,
    c,
    elem=$('body');
console.log(window.x + ' ' + window.y);
$(document).on('click',function(){
});
if(typeof c==='undefined'){
    //你的代码
}
}());

推荐

;(function($,window,document,undefined){
'use strict';
var x = 10,
    y = 100,
    c,
    elem=$('body');
console.log(window.x + ' ' + window.y);
$(document).on('click',function(){});
if(typeof c==='undefined'){
    //你的代码
}
}(jQuery,window,document));
  • 类型转换

number to string的转换,建议使用 1 + ‘’或String(1),不使用new String(1)或1.toString()的方式。
string to number的转换,建议使用parseInt,必须显式指定第二个参数的进制。下面的例子展示了不指定进制的风险:

parseInt('08'); // 0 
parseInt('08', 10); //8

float to integer的转换,建议使用Math.floor/Math.round/Math.ceil方法,不使用parseInt。

  • 使用命名空间

使用多个命名空间,其中的内容互不干扰

//全局对象
var Wrox = {};
//一个命名空间
Wrox.ProAjax = {};
Wrox.ProAjax.EventUtil = {};
Wrox.ProAjax.CookieUtil = {};
//另一个命名空间
Wrox.ProJS = {};
Wrox.ProJS.EventUtil = {};
Wrox.ProJS.CookieUtil = {};
  • 字符串拼接
    字符串拼接,应使用数组保存字符串片段,使用时调用join方法。避免使用+或+=的方式拼接较长的字符串,每个字符串都会使用一个小的内存片段,过多的内存片段会影响性能。如:

不推荐

var str = ''; 
for (var i = 0, len = list.length; i < len; i++) { 
  str+= '<div>' + list[i] + '</div>'; 
} 
dom.innerHTML = str;

推荐

var str = []; 
for (var i = 0, len = list.length; i < len; i++) { 
  str.push('<div>'+ list[i] + '</div>'); 
} 
dom.innerHTML = str.join('');
  • 尽量避免全局变量和函数

不推荐

var name = "";
function setName(value) {
    name = value;
}
function sayName() {
    console.log(name);
}

推荐

var setPersonName = {
    name: "",
    setName: function (value) {
        this.name = value;
    },
    sayName: function () {
        console.log(this.name);
    }
};
setPersonName.setName("Oli");
setPersonName.sayName();