JavaScript代码整洁之道( 二 )


const shapeType = type || "circle";
// ...
}
好代码:
function createShape(type = "circle") {
// ...
}
一个函数做一件事 。避免在单个函数中执行多个操作,多种逻辑坏代码:
function notifyUsers(users) {
users.forEach(user => {
const userRecord = database.lookup(user);
if (userRecord.isVerified()) {
notify(user);
}
});
}

JavaScript代码整洁之道

文章插图
 
好代码:
function notifyVerifiedUsers(users) {
users.filter(isUserVerified).forEach(notify);
}
function isUserVerified(user) {
const userRecord = database.lookup(user);
return userRecord.isVerified();
}
JavaScript代码整洁之道

文章插图
 
使用Object.assign配置默认对象坏代码:
const shapeConfig = {
type: "cube",
width: 200,
height: null
};
function createShape(config) {
config.type = config.type || "cube";
config.width = config.width || 250;
config.height = config.width || 250;
}
createShape(shapeConfig);
好代码:
const shapeConfig = {
type: "cube",
width: 200
};
function createShape(config) {
config = Object.assign(
{
type: "cube",
width: 250,
height: 250
},
config
);
...
}
createShape(shapeConfig);
JavaScript代码整洁之道

文章插图
 
不要使用标志作为参数 。坏代码:
function createFile(name, isPublic) {
if (isPublic) {
fs.create(`./public/${name}`);
} else {
fs.create(name);
}
}
好代码:
function createFile(name) {
fs.create(name);
}
function createPublicFile(name) {
createFile(`./public/${name}`);
}
不要让全局变量/函数污染
 如果需要扩展现有对象,请使用ES类和继承,不要在对象原型链上创建函数 。
坏代码:
Array.prototype.myFunc = function myFunc() {
// 代码逻辑
};
好代码:
class SuperArray extends Array {
myFunc() {
//代码逻辑
}
}
条件不要用否定句坏代码:
function isUserNotBlocked(user) {
//代码逻辑
}
if (!isUserNotBlocked(user)) {
//代码逻辑
}
好代码:
function isUserBlocked(user) {
//代码逻辑
}
if (isUserBlocked(user)) {
//代码逻辑
}
使用布尔变量直接判断,而不是条件语句坏代码:
if (isValid === true) {
//代码逻辑
}
if (isValid === false) {
//代码逻辑
}
好代码:
if (isValid) {
//代码逻辑
}
if (!isValid) {
//代码逻辑
}
避免使用条件,用多态和继承 。坏代码:
class Car {
// ...
getMaximumSpeed() {
switch (this.type) {
case "Ford":
return this.someFactor() + this.anotherFactor();
case "Benz":
return this.someFactor();
case "BYD":
return this.someFactor() - this.anotherFactor();
}
}
}
好代码:
class Car {
// ...
}
class Ford extends Car {
// ...
getMaximumSpeed() {
return this.someFactor() + this.anotherFactor();
}
}
class Benz extends Car {
// ...
getMaximumSpeed() {
return this.someFactor();
}
}
class BYD extends Car {
// ...
getMaximumSpeed() {
return this.someFactor() - this.anotherFactor();
}
}
JavaScript代码整洁之道

文章插图
 
ES类类是JavaScript中的新的语法糖 。除了语法不同外,其他都和prototype一样工作 。使用ES类可以让你的代码更加简洁清晰 。
坏代码:
JavaScript代码整洁之道

文章插图
 
好代码:
JavaScript代码整洁之道

文章插图
 
使用方法链接许多库如jQuery和Lodash都使用该模式 。因此,该方法可以让的代码简洁 。在主类中,只需在每个函数的末尾返回"this",就可以将更多的类方法链接到该方法 。
坏代码:
JavaScript代码整洁之道

文章插图
 
好代码:
JavaScript代码整洁之道


推荐阅读