//bad
if (age > 20) {
return true;
} else {
return false;
}
//good
return age > 20;
//bad
for (var i = 0; i < arr.length; i++) {
//do something..
}
//good
for (var i = 0, len = arr.length; i < len; i++){
//do something..
}
将数组的长度进行存储,循环时就不用每次读取一次数组长度,从而提升性能
//bad
if (value !== "") {
//do something..
}
//good
if (value) {
//do something..
}
js中所有 非空字符 作布尔运算时,都会返回 true,反之返回 false。 (空格 属于非空字符)
//bad
if (user.id === 10) {
if (user.name !=="") {
if (user.email === "email") {
//do something..
}
}
}
//good
if (user.id ===10 && user.name !=="" && user.email === "email") {
//do something..
}
//good
if (user.id !== 10) return;
if (user.name === "") return;
if (user.email !== "email") return;
//do something
多层条件嵌套,进行转换或拆分
//bad
var a = "aa";
var b = "bb";
var c;
//good
var a = "aa",
b = "bb",
c;
定义多个变量,遵循的原则:被赋值的在前面,只是进行声明放在后面
//bad
for (var i = 0; i < 100; i++) {
str += str;
document.getElementById("box").innerHtml = str;
}
//good
for (var i = 0; i < 100; i++) {
str += str;
}
document.getElementById("box").innerHtml = str;
减少DOM操作,将DOM操作放在循环体之外,数据处理好后,只执行一次DOM操作即可
//bad
function test () {
var a = b = 1;
console.log(a);
}
//good
function test () {
var a=1,
b=1;
console.log(a);
}
避免使用 连等号 声明赋值变量。这里存在着一个坑: b 会被声明为全局变量,意思就是在 test() 方法之外b也是可以被访问到的。 全局变量是不推荐使用的,容易污染环境。
//bad
if (age > 20) {
console.log("年龄大于20");
}
//good
(age > 20) && console.log("年龄大于20");
第一个条件为true,就执行后面语句;第一个条件为false,后面语句就不会执行
true && false //false
false && true //false
"aa" && "bb" && "cc" //"cc"
3 > 2 && 123 //123
0 && 1 //0
true && 123 //123
false &&123 //false
//bad
if (!value) {
value = "123"
}
//good
value = value || "123"
与&&相反,第一个条件为false,就执行后面语句;第一个条件为true,后面语句就不会执行
//bad
function test(a,b,c,d) {
//do something..
}
//good
function test(a) {
//do something..
}
当一个方法接受的参数过多的时候,可以考虑将其封装成一个json对象